Java GUI,需要使用actionlistener吗?

时间:2015-01-20 20:35:44

标签: java swing user-interface actionlistener jlist

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

3 个答案:

答案 0 :(得分:3)

像这样使用ListSelectionListener

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

答案 1 :(得分:1)

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

其次,您可以将ItemListener用于您的目的。请注意,如果事件有getStateChange()==ItemEvent.SELECTED

,您可能只想处理该事件

答案 2 :(得分:0)

尝试此演示以供您自己理解:

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
    }
}