2015-01-20 67 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