美好的一天,
我创建了多个面板,第一个正在显示。我需要删除面板,并在用户单击下一个图标时添加一个新面板。在下面的代码中,动作侦听器中无法识别面板引用。我该如何解决这个问题?
int n=0;
for (int l=0; l < layOutPanelCount; l++) {
layOutPanel[l] = new JPanel();
layOutPanel[l].setLayout(null);
layOutPanel[l].setBounds(0, 0, screenWidth, screenHeight);
ImageIcon nextIcon = new ImageIcon("src/icons/next.png");
JLabel nextLabel = new JLabel(nextIcon);
nextLabel.setBounds(xPos, yPos, 48, 48);
nextLabel.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e){
layOutFrame.remove(layOutPanel[l]);
layOutFrame.add(layOutPanel[l + 1]);
//Here the problem occurs, the layOutPanel[] is not recognized.
}
});
layOutPanel[l].add(nextLabel);
}
layOutFrame.add(layOutPanel[1]);
答案 0 :(得分:3)
1)remove/add
JComponent(s)
新的revalidate();
repaint();
到可见容器后,您必须致电
pack()
2)也许你想要re_layout容器,然后你也可以调用JLabel#setIcon(myIcon)
3)在那里我看不到在运行时重新创建JPanel的原因,使用
{{1}}
而不是
答案 1 :(得分:2)
改为使用CardLayout,如图所示here。
JButton
使用ActionListener
而不是JLabel
MouseListener
。
使用布局管理器(具有适当的布局填充和组件边框)而不是null
布局和setBounds()
。