[英]Change content pane of JFrame and new component not displaying
我正在做一个游戏,试图在不同的JPanel
之间切换以显示菜单,世界等。
public static void setComponent(Component component){
frame.getContentPane().removeAll();
frame.getContentPane().add(component, 0);
}
这是一种更改JFrame
框架的组件的方法,该方法首次使用我提供的任何JPanel
组件,但是当我尝试从keyListener方法的任何类内部进行更改时,内容窗格都不会显示任何东西。
@Override
public void mousePressed(MouseEvent arg0) {
Frame.setComponent(new MenuPanel());
}
创建JFrame
方法和重新绘制组件的线程
public static void createFrame(){
frame = new JFrame();
frame.setSize(size);
frame.setTitle(title);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setLayout(new GridLayout(1,1,0,0));
new Thread(){
public void run(){
while(true){
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
if(frame.getComponentCount() != 0){
//System.out.println("?");
frame.getContentPane().repaint();
System.out.println(frame.getContentPane().getComponentAt(1, 1));
}
}
}
}.start();
setComponent(new MenuPanel());
frame.setVisible(true);
}
首次加载时从输出流获取此结果
Menu.MenuPanel[,0,0,794x571,layout=java.awt.FlowLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=]
然后在使用另一个类的setComponent
方法之后
javax.swing.JPanel[null.contentPane,0,0,794x571,invalid,layout=java.awt.GridLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=]
第一次调用setComponent
方法时,需要先执行此操作,然后再调用frame.setVisible(true)
,以强制框架验证其所有组件并显示它们。 以后更改组件时,您需要手动重新验证框架,以使其了解其组件。 将这些行添加到setComponent
方法中,它应该可以工作。
public static void setComponent(Component component){
frame.getContentPane().removeAll();
frame.getContentPane().add(component, 0);
frame.revalidate(); // revalidate all the frame components
frame.repaint(); // and repaint the frame
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.