2017-04-02 53 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