java swing列表_高级Swing——列表

1. 列表

1.1 JList构件

JList可以将多个选项放置在单个框中。为了构建列表框,首先需要创建一个字符串数组,然后将这个数组传递给JList构造器。

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

JList wordList = new JList<>(words);

列表框不能自动滚动,要想为列表框加上滚动条,必须将它插入到一个滚动面板中:

JScrollPane scrollPane = new JScrollPane(wordList);

然后应该应该把滚动面板而不是列表框,插入到外围面板上。

默认情况下,列表框构件可以显示8个选项;可以使用setVisibleRowCount方法改变这个值:

wordList.setVisibleRowCount(4); //display 4 items

还可以使用以下三个值中的任意一个来设置列表框摆放的方向:

• JList.VERTICAL ( 默认值) :垂直摆放所有选项。

• JList.VERTICAL_WRAP: 如果选项数超过了可视行数,就开始新的一列。

•  JList.HORIZONTAL_WRAP:  如果选项数超过了可视行数,就开始新的一行,并且按照水平方向进行填充。

在默认的情况下,用户可以选择多个选项。为了选择多个选项,只需要按住CTRL键,然后在要选择的选项上单击。要选择处于连续范围内的选项,首先选择第一个选项,然后按住SHIFT键,并在最后一个选项上点击即可。

使用setSelectionMode方法,还可以对用户的选择模式加以限制:

wordList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);//select one item at a time

wordList.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);//select one item or one range of items

列表框使用一种不同的事件通知机制,它不需要监听动作事件,而是监听列表选择事件。可以向列表构件添加一个列表选择监听器,然后在监听器中实现下面这个方法:

public void valueChanged(ListSelectionEvent evt)

在用户选择了若干个选项的同时,将产生一系列列表选择事件。假如用户在一个新选项上单击,当鼠标按下的时候,就会有一个事件来报告选项的改变。这是一种过渡型事件,在调用event.getValueIsAdjusting()时,如果该选择仍未最终结束则返回true。然后,当松开鼠标时,就产生另一事件,此时event.getValueIsAdjusting()返回false。如果你对这种过渡型事件不感兴趣,那么可以等待event.getValueIsAdjusting()调用返回false的事件。不过,如果希望只是要点击鼠标就给用户一个即时反馈,那么就需要处理所有的事件。

一旦被告知某个事件已经发生,那么就需要弄清楚当前选择了哪些选项。如果是单选模式,调用getSelectedValue可以获取所有选中列表的元素的值;否则调用getSelectedValues返回一个包含所有选中选项的对象数组。之后,可以以常规方式处理它。

for(String value : wordList.getSelectedValuesList())//do something with value

注意:列表构件不响应鼠标的双击事件。正如Swing设计者所构想的那样,使用列表选择一个选项,然后点击某个按钮执行某个动作。但是,某些用户界面允许用户在一个列表选项上双击鼠标,作为选择一个选项并调用一个默认动作的快捷方式。如果想实现这中行为,那么必须对这个列表框添加一个鼠标监听器,然后按照下面这样捕获鼠标事件:

public voidmouseClicked(MouseEvent evt)

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

{

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

Object[] selection=source.getSelectedValues();

doAction(selection);

}

}

下面的程序展示了一个填入字符串的列表框。请注意valueChanged方法是怎样根据被选项来创建消息字符的。

packagelist;importjava.awt.BorderLayout;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;import javax.swing.*;importjavax.swing.event.ListSelectionEvent;importjavax.swing.event.ListSelectionListener;public class ListFrame extendsJFrame {private static final int DEFAULT_WIDTH=400;private static final int DEFAULT_HEIGHT=300;privateJPanel listPanel;private JListwordlist;privateJLabel label;privateJPanel buttonPanel;privateButtonGroup group;private String prefix="The ";private String suffix

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值