2017-04-02 77 views
0

我想要一個ListSelectionListener事件來更改一個jpanel,我知道它正在被正確觸發,因爲print語句正在工作,但面板根本不會改變。ListSelectionListener不改變面板

DefaultListModel leftList = new DefaultListModel(); 
JList order = new JList(leftList); 
order.addListSelectionListener(this); 
JPanel configPanel = new JPanel(); 

public void valueChanged(ListSelectionEvent e) { 
if(e.getValueIsAdjusting()){ 
     int index = order.getSelectedIndex(); 
     System.out.println(leftList.getElementAt(index).toString()); 
     configPanel.removeAll(); 
     configPanel.repaint(); 
     configPanel.add(new JLabel("nice")); 
     configPanel.repaint(); 
     } 
    } 

我扔在第二重繪,只是因爲我是出來的東西去嘗試,但它仍然當您添加組件可見GUI的基本邏輯是沒有工作

回答

2

panel.remove(...); 
panel.add(...); 
panel.revalidate(); 
panel.repaint(); 

基本上所有組件的大小都是(0,0),因此在創建時沒有任何東西需要繪製。您需要調用revalidate(),以便佈局管理器可以爲組件提供面板上的大小和位置。

+0

謝謝你這個工作,所以如果我有這個權利,jlabel會顯示當偵聽器被解僱,但因爲它是大小(0,0)它只是不可見,這是唯一的問題嗎? – Joking313