java jlist多列_Jlist的用法

JList从含义上看是一个列表,有点和JComboBox相似。其实不然,JComboBox的内容只能用一列显示出来,而JList的内容可以多列显示。

一,构造方法:见例子

String[] words= { "quick", "brown", "hungry", "wild"};

JList wordList = new JList(words);

参数为对象数组。

二,使用如下方法实现Jlist的多列显示:

setLayoutOrientation(参数);

参数默认为:

①JList.VERTICAL:用一列来显示,但不会自动滚动,需要添加滚动面板才能出现滚动条。

注:setVisibleRowCount(n);方法可以设置最多显示多少行(若没有添加滚动面板,此设置无效,所有内容均会显示)。

②JList.VERTICAL_WRAP:在保证行数不超过setVisibleRowCount(n)的情况下纵向排列元素。

注:此时滚动面板无效,因为行数永远不可能超标,因此滚动面板也永远不会出现。

③JList.HORIZONTAL_WRAP:同上不过是横向排列元素。

importjava.awt.Font;importjavax.swing.JFrame;importjavax.swing.JList;public classtest{public static voidmain(String[] args) {//TODO Auto-generated method stub

JFrame frame;

String [] words={"first","second","third","forth","fifth"};

JList list=newJList(words);

frame=new JFrame("test");

frame.setSize(500, 500);

frame.setVisible(true);

list.setFont(new Font(null, 0, 30));

list.setVisibleRowCount(3);//最多显示三行!!!!!!!

list.setLayoutOrientation(JList.VERTICAL_WRAP);

frame.add(list);

}

}

三,事件的处理

他处理的是ListSelectionEvent事件,监听器为ListSelectionListener

在这个事件处理过程中,将鼠标的操作分为2种状态:

1.按下鼠标不松手,在各个元素间拖动;

2.松开鼠标

注:当你按下鼠标后,会触发一个事件,拖动到另一个控件,又触发一个事件,继续拖动则继续触发事件,最后松手,触发一个事件。

如何区分这2种情况呢?

ListSelectionEvent提供了一个方法getValueIsAdjusting(),如果该方法返回true,则代表情况1;反之代表情况2。

注意:JList控件不提供鼠标双击元素的处理事件,若要处理鼠标双击的情况,则应该添加鼠标监听器,代码如下:

public voidmouseClicked(MouseEvent evt)

{if (evt.getClickCount() == 2)

{

JList source=(JList) evt.getSource();

Object[] selection=source.getSelectedValues();

doAction(selection);

}

}

四,以ListModel方式创建JList

数据模型顾名思义是负责显示数据的,也就是说JList的数据都是从这个模型里取的,数据模型在swing中是比较经典的用法,很多重要的组件都有对应的数据模型mode

数据模型分为两种:

一种是继承AbstractListModel,一种是DefaultListModel

public classt {public static voidmain(String[] args) {

JFrame f= newJFrame();

f.setSize(600, 500);

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JPanel panel= newJPanel();

JScrollPane scrollPane= newJScrollPane();

scrollPane.setPreferredSize(new Dimension(200,100));//以数据模型构造方法创建

final JList jList = new JList(newMyListModel());

jList.addListSelectionListener(newListSelectionListener(){

@Overridepublic voidvalueChanged(ListSelectionEvent e) {if(!jList.getValueIsAdjusting()){ //设置只有释放鼠标时才触发

System.out.println(jList.getSelectedValue());

}

}

});

scrollPane.setViewportView(jList);

panel.add(scrollPane);

f.getContentPane().add(panel);

f.setVisible(true);

}

}//列表数据模型

class MyListModel extendsAbstractListModel{

@Overridepublic Object getElementAt(intindex) {//TODO Auto-generated method stub

returnindex;

}

@Overridepublic intgetSize() {//TODO Auto-generated method stub

return 100;

}

}

public classt {public static voidmain(String[] args) {

JFrame f= newJFrame();

f.setSize(600, 500);

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JPanel panel= newJPanel();

JScrollPane scrollPane= newJScrollPane();

scrollPane.setPreferredSize(new Dimension(200,100));final DefaultListModel d = new DefaultListModel();//只有默认的模型有添加/删除方法

d.addElement("aa");

d.addElement("bb");final JList jList = new JList(d);

jList.addListSelectionListener(newListSelectionListener(){

@Overridepublic voidvalueChanged(ListSelectionEvent e) {if(!jList.getValueIsAdjusting()){ //设置只有释放鼠标时才触发

System.out.println(jList.getSelectedValue());

}

}

});

scrollPane.setViewportView(jList);

panel.add(scrollPane);

f.getContentPane().add(panel);

f.setVisible(true);

}

}

转自:

http://bbs.csdn.net/topics/350130389

http://blog.csdn.net/he_chenjun/article/details/9128965#

参与评论 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:1024 设计师:我叫白小胖 返回首页

打赏作者

YiQiuuu

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值