ListSelectionListener 不更改面板
ListSelectionListener not changing panel
我想要一个 ListSelectionListener 事件来改变一个 JPanel。我知道它被正确触发,因为打印语句正在运行,但是面板根本没有改变。
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()
以便布局管理器可以为组件指定面板上的大小和位置。
我想要一个 ListSelectionListener 事件来改变一个 JPanel。我知道它被正确触发,因为打印语句正在运行,但是面板根本没有改变。
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()
以便布局管理器可以为组件指定面板上的大小和位置。