Tips:

(1)JList不能自动滚动,要想为列表框加上滚动条,必须将JList插入到一个JScrollPane中,然后将JScollPane而不是JList,插入到外围JPanel上

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

(3)JList不响应鼠标的双击事件。正如Swing设计者所构想的那样,使用列表选择一个选项,然后点击某个按钮执行某个动作。
如果想让JList对双击事件进行响应,必须对JList添加一个鼠标监听器,然后按照下面这样捕获鼠标事件:
eg:

        wordList.addMouseListener(new MouseListener() {

            @Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub } @Override
public void mousePressed(MouseEvent e) {
} @Override
public void mouseExited(MouseEvent e) { } @Override
public void mouseEntered(MouseEvent e) { } @Override
public void mouseClicked(MouseEvent e) {
if (e.getClickCount()==2) {
JList source=(JList) e.getSource();
Object[] selection=source.getSelectedValues();
doAction(selection);
}
}
});

package swing.jlist;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener; /*2015-7-8*/
public class JListTest {
public static void main(String[] args) {
ListFrame frame = new ListFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.setLocationRelativeTo(null);
} } class ListFrame extends JFrame {
private static final long serialVersionUID = 1L;
private static final int DEFAULT_WIDTH = 400;
private static final int DEFAULT_HEIGHT = 300; private JPanel listPanel;
private JList wordList;
private JLabel label;
private JPanel buttonPanel;
private ButtonGroup group;
private String prefix = "The ";
private String suffix = "fox jumps over the lazy dog."; public ListFrame() {
setTitle("ListTest");
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); String[] words = { "quick", "brown", "hungry", "wild", "silent", "huge", "private", "abstract", "static", "final" };
wordList = new JList(words);
wordList.setVisibleRowCount(4);
JScrollPane scrollPane = new JScrollPane(wordList);
listPanel = new JPanel();
listPanel.add(scrollPane);
wordList.addListSelectionListener(new ListSelectionListener() { @Override
public void valueChanged(ListSelectionEvent e) {
Object[] values = wordList.getSelectedValues();
StringBuilder text = new StringBuilder(prefix);
for (int i = 0; i < values.length; i++) {
String word = (String) values[i];
text.append(word);
text.append(" ");
}
text.append(suffix);
label.setText(text.toString());
}
}); buttonPanel = new JPanel();
group = new ButtonGroup();
makeButton("Vertical", JList.VERTICAL);
makeButton("VERTICAL_WRAP", JList.VERTICAL_WRAP);
makeButton("HORIZONTAL_WRAP", JList.HORIZONTAL_WRAP);
add(listPanel, BorderLayout.NORTH);
label = new JLabel(prefix + suffix);
add(label, BorderLayout.CENTER);
add(buttonPanel, BorderLayout.SOUTH); } private void makeButton(String label, final int orientation) {
JRadioButton button = new JRadioButton(label);
buttonPanel.add(button);
if (group.getButtonCount() == 0) {
button.setSelected(true);
} group.add(button); button.addActionListener(new ActionListener() { @Override
public void actionPerformed(ActionEvent e) {
wordList.setLayoutOrientation(orientation);
listPanel.revalidate();
}
}); } }

JListDemo的更多相关文章

  1. Java-GUI基础(三)java.swing

    1. 简介 swing与awt:可以认为awt是swing的前身,awt即Abstrace Window Toolkit抽象窗口工具包,swing是为了解决awt在开发中的问题而开发的,是awt的改良 ...

随机推荐

  1. ios UITableView 相关

    1.tableView 实现的方法 无分组的cell #pragma mark - Table view data source - (NSInteger)tableView:(UITableView ...

  2. Net分布式系统

    Net分布式系统 Net分布式系统之三:Keepalived+LVS+Nginx负载均衡之高可用 摘要: 上一篇写了nginx负载均衡,此篇实现高可用(HA).系统整体设计是采用Nginx做负载均衡, ...

  3. 屏蔽DataGridView控件DataError 事件提示的异常信息

    DataGridView.DataError 事件简单介绍: 出现故障.则外部数据分析或验证操作引发异常,或者.当尝试提交数据写入数据源失败. 具体信息:參见MSDN this.dgvState.Da ...

  4. CSS3影子 box-shadow使用和技巧总结

    text-shadow阴影效果添加到文本,box-shadow块元素被添加到周围的阴影. 随着html5和CSS3声望.越来越普遍的使用特效. 基本语法这是{box-shadow:[inset] x- ...

  5. Android开发ListView使用OnScrollListener实现分页加载数据

    上篇博文和大家分享了下拉刷新,这是一个用户体验很好的操作方式.新浪微薄就是使用这样的方式的典型. 还有个问题,当用户从网络上读取微薄的时候.假设一下子所有载入用户未读的微薄这将耗费比較长的时间,造成不 ...

  6. ecshop2.7.3怎么自动清除缓存

    1.在ecs_shop_config表中插入一条数据 进入ECSHOP后台-数据库管理-SQL查询 复制下面SQL,粘贴到里面执行.注意这时是默认表前缀ecs_,如果你的修改过要和你的统一了. INS ...

  7. 【设计优化】-使用缓冲(Buffer)提高程序性能

    缓冲区是一块特定的内存区域.开辟缓冲区的目的是通过缓解应用程序上下层之间的性能差异,提高系统性能. 缓冲能够协调上层组件和下层组件的性能差异.当上层组件性能因为下层组件时,能够有效地降低上层组件对下层 ...

  8. 《深入Java虚拟机》笔记:指令集 (转)

    <深入Java虚拟机>笔记:指令集   指令 含义 iconst_m1 把int型常量-1压入栈中 iconst_0 把int型常量压入栈中 fconst_1 把float型常量1压入栈中 ...

  9. 如何使用 yum 安装/更新/移除 软件

    如何使用 yum 安装/更新/移除 软件 一. 建立仓库(repository)和源 a) 拷贝所以相关rpm包到某个目录 b) 执行createrepo  /目录/目录/目录/目录   注意:b)中 ...

  10. 怎样在Android开发中FPS游戏实现的两种方式比较

    怎样在Android开发中FPS游戏实现的两种方式比较 如何用Android平台开发FPS游戏,其实现过程有哪些方法,这些方法又有哪些不同的地方呢?首先让我们先了解下什么是FPS 英文名:FPS (F ...