我想要一个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(),以便布局管理器可以在面板上为组件指定大小和位置。

09-10 01:02