我正在制作游戏,并且我尝试在不同的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=]
答案 0 :(得分:0)
第一次调用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
}