我正在构建一个程序,需要将当前可见的JPanel换成另一个 . 不幸的是,似乎有很多事情要做,我的所有尝试都以失败告终 . 我可以成功地让第一个JPanel出现在我的JFrame中,但是交换JPanel会导致一个空白的JFrame .
我的主要JFrame:
public class ShellFrame {
static CardLayout cl = new CardLayout(); //handles panel switching
static JFrame frame; //init swing on EDT
static MainMenu mm;
static Panel2 p2;
static Panel3 p3;
public static void main(String[] args) {
initFrame();
}
public static void initFrame() {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
frame = new JFrame();
frame.setDefaultCloseOperation(3);
frame.setLayout(cl);
mm = new MainMenu();
pp = new PlacementPanel();
//first panel added to frame will always show first
frame.add(mm, "MainMenu");
frame.pack(); //sizes frame to fit the panel being shown
frame.setVisible(true);
}
});
}
public static void switchPanel(String name) {
cl.show(frame.getContentPane(), name);
frame.pack();
}
public static void updatePanel2(/* args */) {
frame.removeAll();
p2 = new Panel2(/* args */);
frame.add(pp, "PlacementPanel");
frame.pack();
frame.validate();
frame.repaint();
}
我正在尝试使用updatePanel2将现有面板换成新的Panel2,但它似乎不起作用 . Panel2可以自行运行,但尝试将它与我的程序结合使用只会产生一个空白窗口 . 任何帮助将不胜感激!
3 回答
that requires swapping out the current, visible JPanel with another
有关如何正确执行此操作的完整示例,请查看CardLayout .
我有一个Swing应用程序,当用户按下'SPACE'键时,它会“交换”面板,显示正在运行的模拟的实时情节 . 我做的是这样的:
这对我的'show live plot'问题非常有效 . 而且还有
CardLayout
方法,如果遇到麻烦,你可能会变成一个新的单独问题 . 祝好运!您应该对要更换的面板执行
.setVisible(false);
.这是一个工作示例,当您按“ENTER”时它会切换面板;如果在IDE中复制它,则自动获取导入(在Eclipse中移位o);
// -------------这里是替代品: