JListDemo

简介: Tips: (1)JList不能自动滚动,要想为列表框加上滚动条,必须将JList插入到一个JScrollPane中,然后将JScollPane而不是JList,插入到外围JPanel上   (2)ListSelectionListenerpublic void valueChanged(ListSelectionEvent event)在用户选择了若干个选项的同时,将产生一系统列表选择事件。

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();
            }
        });

    }

}

 

相关文章
|
3月前
【科研技巧】解决WPS中插入mathtype选项卡为灰色不能使用
解决WPS中Mathtype插件选项卡显示为灰色且无法使用的问题的步骤,包括安装宏组件VBA WPS,复制特定的文件到WPS安装目录和启动目录,并在完成这些步骤后重新打开WPS以使选项卡可用。
668 0
|
存储 弹性计算 Unix
阿里云服务器数据盘是什么?和系统盘有什么区别?
阿里云服务器系统盘和数据盘有什么区别?系统盘类似Windows电脑的C盘,数据盘相当于其他盘符,数据盘可以有多个而系统盘只能有一个,数据盘可有可无而云服务器系统盘是必须要有的
1014 0
阿里云服务器数据盘是什么?和系统盘有什么区别?
|
缓存 Java 应用服务中间件
【C】高并发线程池设计
【C】高并发线程池设计
|
SQL 存储 人工智能
[GCP]BigQuery大数据产品系列分析介绍
介绍GCP大数据相关产品能力系列介绍
2156 1
[GCP]BigQuery大数据产品系列分析介绍
|
XML 存储 JSON
Android——一个简单的天气APP
此天气数据源采用[心知天气API(试用版)](https://www.seniverse.com/),免费版获取数据有限,只能获取普通的温度、湿度等,例如压力、云量、可见度等均获取不到,试用版相当于正式版,可以获取大部分数据,试用日期是14天。 首页不同城市天气页面之间的滑动采用的是`ViewPager`,编辑界面的搜索栏采用的是`SearchView+ListView`,其中城市数据源是统计到一个xml文件中;通过点击搜索匹配项,插入至SQLite数据库中,然后刷新当前天气子项,然后通过`EventBus`通知首页更新views页面。处于编辑状态时,删除子项,同样使用`EventBus`通知
557 0
|
存储 安全 算法
分享实录 | 阿里巴巴自研代码管理平台技术解密
近日,阿里巴巴旗下企业级一站式DevOps平台——阿里云·云效正式开启公测,为了让广大开发者更好地了解“新云效”,《云效说码》栏目特别策划了《为云研发而生 解密云效公测版专场》系列分享,邀请了5位阿里巴巴技术专家通过视频直播的方式与大家在线交流,分享云效产品的亮点和技术优势。
4653 0
分享实录 | 阿里巴巴自研代码管理平台技术解密
|
算法 安全 开发工具
阿里云云码广告联盟高效助力中小App流量变现
EMAS 增添新能力,开发者通过对EMAS统一SDK集成,轻松接入云码,从而实现应用的流量快速变现。
2303 0
阿里云云码广告联盟高效助力中小App流量变现
|
开发工具
IDEA 插件开发入门教程
IntelliJ IDEA 是目前最好用的 JAVA 开发 IDE,它本身的功能已经非常强大了,但是每个人的需求不一样,有些需求 IDEA 本身无法满足,于是我们就需要自己开发插件来解决。工欲善其事,必先利其器,想要提高开发效率,我们可以借助 IDEA 提供的插件功能来满足我们的需求。
7992 1
|
JavaScript Java
基于 Typescript 和 Decorator 实现依赖注入
## 什么是依赖注入 依赖注入是将一个对象所依赖的其他对象直接提供给这个对象,而不是在当前对象中直接构建这些依赖的对象。 ## 为什么要使用依赖注入 - 便于单元测试 - 解耦,统一管理被依赖对象的实例化,不用在类的内部创建被依赖对象 ## 如何实现依赖注入 ### Typescript 中的装饰器 Decorator 装饰器是一种特殊类型的声明,它能够被附
2598 0
|
搜索推荐 算法 SEO
如何做ASO?ASO和SEO有何异同?
有人说SEO已死,小马识途营销顾问并不认同,SEO并不纯粹是一门技术,而是一种思想,只要存在网站,只要存在搜索引擎,SEO的价值就会一直存在。相信搞网络营销的小伙伴对SEO已经耳熟能详,但是对ASO的技巧是否也了如指掌呢?如今,互联网发展如日中天,每日有数以万计的APP应用上线到各大应用市场,这也让SEO的思想延伸到了应用商店,也就是ASO。
3450 0