请教JAVA问题
importjava.applet.*importjava.awt.*;importjavax.swing.*;importjavax.swing.event.*;cla...
import java.applet.*
import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
class MyWindow extends JFrame implements ListSelectionListener{
JList list1,list2;
String news[]={"人民日报","新民日报","浙江日报","文汇报"};
String sports[]={"篮球","排球","足球","乒乓球"};
JTextArea text;
MyWindow(String s){
super(s);
Container con=getContentPane();
con.setBackground(Color.BLUE);
con.setLayout(new GridLayout(2,2));
con.setSize(200,500);
list1=new JList(news);
list1.setVisibleRowCount(3);
list1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
list1.addListSelectionListener(this);
list2=new JList(sports);
list2.setVisibleRowCount(2); //问题4所在行
list2.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
list2.addListSelectionListener(this);
con.add(list1);
con.add(list2);
text=new JTextArea(10,20);
con.add(text);
this.setVisible(true);
this.pack();
}
public void valueChanged(ListSelectionEvent e){
if(e.getSource()==list1){
text.setText(null);
Object listValue=((JList)e.getSource()).getSelectedValue(); //问题1所在行
String seleName=listValue.toString(); //问题2所在行
for(int i=0;i<news.length;i++)
if(news[i].equals(seleName)){
text.append(seleName+":被选中\n");
}
} else if (e.getSource()==list2){
text.setText(null);
int tempList[]=list2.getSelectedIndices(); //问题3所在行
for(int i=0;i<tempList.length;i++)
text.append(sports[tempList[i]]+":被选中\n");
}
}
}
public class applet123 extends Applet{
MyWindow mywin=new MyWindow("列表示例");
请问:
1。e.getSource()得到的值是list1或者list2,它们的类型本身就是JList,为什么前面还非要加一个强制类型转化呢?--(JList)e.getSource());
2.列表的项的数据类型不是字符 串吗?为什么还要加 toString()转化呢?
项的数据类型是Object吗?为什么呢?
3。能将getSelectedIndices()得到的值直接赋给一 个数组吗?
4。setVisibleRowCount(2)不是设定列表只能显示2 行吗,为什么调试时还是全部都显示出来了呢? 展开
import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
class MyWindow extends JFrame implements ListSelectionListener{
JList list1,list2;
String news[]={"人民日报","新民日报","浙江日报","文汇报"};
String sports[]={"篮球","排球","足球","乒乓球"};
JTextArea text;
MyWindow(String s){
super(s);
Container con=getContentPane();
con.setBackground(Color.BLUE);
con.setLayout(new GridLayout(2,2));
con.setSize(200,500);
list1=new JList(news);
list1.setVisibleRowCount(3);
list1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
list1.addListSelectionListener(this);
list2=new JList(sports);
list2.setVisibleRowCount(2); //问题4所在行
list2.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
list2.addListSelectionListener(this);
con.add(list1);
con.add(list2);
text=new JTextArea(10,20);
con.add(text);
this.setVisible(true);
this.pack();
}
public void valueChanged(ListSelectionEvent e){
if(e.getSource()==list1){
text.setText(null);
Object listValue=((JList)e.getSource()).getSelectedValue(); //问题1所在行
String seleName=listValue.toString(); //问题2所在行
for(int i=0;i<news.length;i++)
if(news[i].equals(seleName)){
text.append(seleName+":被选中\n");
}
} else if (e.getSource()==list2){
text.setText(null);
int tempList[]=list2.getSelectedIndices(); //问题3所在行
for(int i=0;i<tempList.length;i++)
text.append(sports[tempList[i]]+":被选中\n");
}
}
}
public class applet123 extends Applet{
MyWindow mywin=new MyWindow("列表示例");
请问:
1。e.getSource()得到的值是list1或者list2,它们的类型本身就是JList,为什么前面还非要加一个强制类型转化呢?--(JList)e.getSource());
2.列表的项的数据类型不是字符 串吗?为什么还要加 toString()转化呢?
项的数据类型是Object吗?为什么呢?
3。能将getSelectedIndices()得到的值直接赋给一 个数组吗?
4。setVisibleRowCount(2)不是设定列表只能显示2 行吗,为什么调试时还是全部都显示出来了呢? 展开
2个回答
展开全部
1、你怎么知道e.getSource()得到的值就是list1或者list2,那道就因为if(e.getSource()==list1)这个,==只能说明他们两个在内存中的地址是一样的,这是源码的方法定义public java.lang.Object getSource();看到没有,他返回的是一个object,所以要强制类型转换。
2、Object listValue=((JList)e.getSource()).getSelectedValue();
String seleName=listValue.toString(); listValue是object类型,当然要toString
3、getSelectedIndices()返回的就是一个整型数组,
int[] getSelectedIndices()
Returns an array of all of the selected indices, in increasing order. 这是官方api
4、
void setVisibleRowCount(int visibleRowCount)
Sets the visibleRowCount property, which has different meanings depending on the layout orientation: For a VERTICAL layout orientation, this sets the preferred number of rows to display without requiring scrolling; for other orientations, it affects the wrapping of cells.
官方解释
2、Object listValue=((JList)e.getSource()).getSelectedValue();
String seleName=listValue.toString(); listValue是object类型,当然要toString
3、getSelectedIndices()返回的就是一个整型数组,
int[] getSelectedIndices()
Returns an array of all of the selected indices, in increasing order. 这是官方api
4、
void setVisibleRowCount(int visibleRowCount)
Sets the visibleRowCount property, which has different meanings depending on the layout orientation: For a VERTICAL layout orientation, this sets the preferred number of rows to display without requiring scrolling; for other orientations, it affects the wrapping of cells.
官方解释
展开全部
你问题真多,,,,算了一个个给你解答(只说方法,答案可能要自己去摸索):
e.getSource()得到的值,是个数组对象或者Object(这个可以用eclipse去查看,鼠标放在在方法的上面,按alt+/),所以要加强制类型转换。
jlist的里边元素谁跟你说是string? 当你没有对list进行泛型定义的时候,它默认都是object,泛型定义如下 List<String > list = new List<String>.
getSelectedIndices().去提示栏,看下它的返回值类型,是数组的话就可以,一般都是不行。
setVisibleRowCount() ,代码在哪里?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询