请教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 行吗,为什么调试时还是全部都显示出来了呢?
展开
 我来答
阿咕噜
推荐于2016-07-28 · 从互联网慢慢上岸的程序员
阿咕噜
采纳数:107 获赞数:350

向TA提问 私信TA
展开全部
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.
官方解释
一缕月光9
2014-08-22
知道答主
回答量:23
采纳率:0%
帮助的人:12.4万
展开全部

你问题真多,,,,算了一个个给你解答(只说方法,答案可能要自己去摸索):

  1. e.getSource()得到的值,是个数组对象或者Object(这个可以用eclipse去查看,鼠标放在在方法的上面,按alt+/),所以要加强制类型转换。

  2. jlist的里边元素谁跟你说是string? 当你没有对list进行泛型定义的时候,它默认都是object,泛型定义如下 List<String >  list = new  List<String>.

  3. getSelectedIndices().去提示栏,看下它的返回值类型,是数组的话就可以,一般都是不行。

  4. setVisibleRowCount() ,代码在哪里?

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式