我想从窗口(JFrame)中删除旧的JPanel并添加一个新的JPanel。我应该怎么做?如何删除旧的JPanel并添加新的JPanel?
我试过如下:
public static void showGUI() {
JFrame frame = new JFrame("Colored Trails");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(partnerSelectionPanel);
frame.setSize(600,400);
frame.setVisible(true);
}
private static void updateGUI(final int i, final JLabel label, final JPanel partnerSelectionPanel) {
SwingUtilities.invokeLater(
new Runnable() {
public void run() {
label.setText(i + " seconds left.");
}
partnerSelectionPanel.setVisible(false); \\ <------------
}
);
}
我的代码更新“旧”的JPanel,然后它使整个的JPanel无形的,但它不工作。编译器抱怨用<------------
表示的行。它写道:<identifier> expected, illegal start of type
。
新增:
我已经成功地做到我需要什么,我做到了以下列方式:
public static void showGUI() {
frame = new JFrame("Colored Trails");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(partnerSelectionPanel);
//frame.add(selectionFinishedPanel);
frame.setSize(600,400);
frame.setVisible(true);
}
public static Thread counter = new Thread() {
public void run() {
for (int i=4; i>0; i=i-1) {
updateGUI(i,label);
try {Thread.sleep(1000);} catch(InterruptedException e) {};
}
partnerSelectionPanel.setVisible(false);
frame.add(selectionFinishedPanel);
}
};
它的工作原理,但它不看我像一个安全的解决方案原因如下:
- 我改变并从另一个线程向JFrame添加元素。
- 我已经“打包”了JFrame并使其可见之后,我向JFrame添加了一个新的JPanel。
我应该这样做吗?
拉斯海沃德,是否可以将捞出的JFrame后添加JPanels已经打包,并设置明显的?我应该在事件派发线程中添加和删除JPanel吗? – Roman 2010-03-21 16:26:25
我通过'frame.getContentPane()。remove(partnerSelectionPanel);'替换了'partnerSelectionPanel.setVisible(false);'后,我的程序停止移除旧的帧(即使我最后使用'invalidate' )。 – Roman 2010-03-21 16:31:36
是在EDT上添加,删除和创建组件。我错过了一个验证电话 - 我从来没有记得那些!如果添加无效和验证,应该可以工作。 – 2010-03-21 16:42:14