Java ListSelectionListener未更改面板
我需要ListSelectionListener事件来更改JPanel。我知道它被正确地触发了,因为print语句正在工作,但是面板根本没有改变Java ListSelectionListener未更改面板,java,swing,listselectionlistener,Java,Swing,Listselectionlistener,我需要ListSelectionListener事件来更改JPanel。我知道它被正确地触发了,因为print语句正在工作,但是面板根本没有改变 DefaultListModel leftList = new DefaultListModel(); JList order = new JList(leftList); order.addListSelectionListener(this); JPanel configPanel = new JPanel(); public void valu
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()
,以便布局管理器可以在面板上为组件提供大小和位置。将组件添加到可见GUI时,基本逻辑是:
panel.remove(...);
panel.add(...);
panel.revalidate();
panel.repaint();
基本上,所有组件在创建时都具有(0,0)的大小,因此没有任何可绘制的内容。您需要调用
revalidate()
,这样布局管理器就可以在面板上为组件提供一个大小和位置。谢谢,这是有效的,所以如果我有这个权利,当监听器被触发时,jlabel就会出现,但由于它的大小(0,0)不可见,这是唯一的问题,对吗?谢谢,这是有效的,因此,如果我没有弄错的话,当侦听器被触发时,jlabel会出现,但是由于它的大小(0,0),所以它就是不可见的,这是唯一的问题,对吗?