繁体   English   中英

Java GUI,需要使用动作侦听器吗?

[英]Java GUI, need to use an actionlistener?

我有2个JLists的GUI。 我一次只需要选择两个列表中的一个选项,例如,如果用户在一个列表中选择了某个内容,那么在另一个列表中选择某个内容将导致第一个列表中的一个被取消选择。 我的想法只是在列表上使用动作侦听器,因此,当选择一个列表中的任何内容时,将取消选择另一个列表,但是显然这是行不通的。 我已经阅读了有关此主题的文章,并且似乎普遍的共识是使用mouseListener来做到这一点。 这是唯一的方法吗? 我真的不想在程序中添加大量额外的代码,因为已经设置了动作侦听器代码。 我不在乎在每个列表中选择什么,我什至不需要知道索引,我只需要知道什么时候被选择。 提前致谢。

像这样使用ListSelectionListener

list.addListSelectionListener(new ListSelectionListener() {
    public void valueChanged(ListSelectionEvent e) {
        // deactivate other list
    }
});

首先,您是否考虑过所有方法来防止同时选择两个列表中的元素的情况? 就像在选择时禁用其他列表一样(Component.setEnabled(false))

其次,可以将ItemListener用于您的目的。 请注意,如果事件具有getStateChange()==ItemEvent.SELECTED则可能只想处理该事件

试试看这个演示,以您自己的理解:

import javax.swing.*;
import java.awt.*;

import javax.swing.event.*;
import java.awt.event.*;

public class Demo extends JFrame {
    String[] options = {"1. Something", "2. Something", "3. Something", "4. Something"};
    JList<String> list;

    Demo() {
        setSize(640, 480);
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        list = new JList<String>(options); // set options in list
        add(list); // add list to current frame
        pack();

        // bind event listener to list

        list.addListSelectionListener(new ListSelectionListener() {
            public void valueChanged(ListSelectionEvent e) {
                System.out.println("Something happened");
            }
        });
    }

    public static void main(String[] args) {
        new Demo(); // initialize demo
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM