我想要一个ListSelectionListener事件来更改一个JPanel。我知道它会被正确触发,因为print语句正在工作,但是面板根本没有变化。
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时,基本逻辑是:
panel.remove(...);
panel.add(...);
panel.revalidate();
panel.repaint();
基本上,所有组件在创建时的大小都为(0,0),因此无需绘制任何内容。您需要调用
revalidate()
,以便布局管理器可以在面板上为组件指定大小和位置。