2015-01-20 71 views
0

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

+2

[如何写一个列表选择监听器](http://docs.oracle.com/javase/tutorial/uiswing/events/listselectionlistener.html) – MadProgrammer 2015-01-20 21:06:03

回答

1

首先,你有没有考虑过所有的方法来防止你的情况在两个列表中的元素被选中?像选择时禁用另一个列表(Component.setEnabled(false))

其次,您可以为您的目的使用ItemListener。要知道,你可能只需要来处理该事件,如果有getStateChange()==ItemEvent.SELECTED

3

使用ListSelectionListener这样的:

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

你有工作@Tiggerbiggo? – 2015-01-20 21:10:53

+0

对不起,我一直在做其他事情,对于迟到的回复感到抱歉。我现在只是尝试了一下,这段代码看起来不错,我相信它会起作用,一旦我尝试过后会再次发布 – Tiggerbiggo 2015-01-21 10:24:04

+0

虽然,看着那个,parens看起来有点不合适,为什么你有一个方法括号?不应该是: – Tiggerbiggo 2015-01-21 10:25:59

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

这是怎么回事?我运行它,它清楚地表明了这个概念。 – 2015-01-21 14:45:10