我正在使用Java进行项目,需要在单击JFrame
中的特定按钮后重新加载整个JFrame
。如何做到这一点?
我正在使用Java进行项目,需要在单击JFrame
中的特定按钮后重新加载整个JFrame
。如何做到这一点?
SwingUtilities.updateComponentTreeUI(frame);
如果仍然无法正常工作,则在完成上述步骤后尝试
frame.invalidate();
frame.validate();
frame.repaint();
只需要使用 frame.setVisible(false); frame.setVisible(true); 我曾经有一个包含图像的JLabel出现了问题,这解决了它。
这是一段可能有帮助的简短代码。
<yourJFrameName> main = new <yourJFrameName>();
main.setVisible(true);
this.dispose();
在哪里...
main.setVisible(true);
将会再次运行JFrame。
this.dispose();
将终止正在运行的窗口。
尝试使用这段代码。我之前也遇到了相同的问题,不过最终还是解决了。
public class KitchenUserInterface {
private JFrame frame;
private JPanel main_panel, northpanel , southpanel;
private JLabel label;
private JButton nextOrder;
private JList list;
private static KitchenUserInterface kitchenRunner ;
public void setList(String[] order){
kitchenRunner.frame.dispose();
kitchenRunner.frame.setVisible(false);
kitchenRunner= new KitchenUserInterface(order);
}
public KitchenUserInterface getInstance() {
if(kitchenRunner == null) {
synchronized(KitchenUserInterface.class) {
if(kitchenRunner == null) {
kitchenRunner = new KitchenUserInterface();
}
}
}
return this.kitchenRunner;
}
private KitchenUserInterface() {
frame = new JFrame("Lullaby's Kitchen");
main_panel = new JPanel();
main_panel.setLayout(new BorderLayout());
frame.setContentPane(main_panel);
northpanel = new JPanel();
northpanel.setLayout(new FlowLayout());
label = new JLabel("Kitchen");
northpanel.add(label);
main_panel.add(northpanel , BorderLayout.NORTH);
frame.setSize(500 , 500 );
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private KitchenUserInterface (String[] order){
this();
list = new JList<String>(order);
main_panel.add(list , BorderLayout.CENTER);
southpanel = new JPanel();
southpanel.setLayout(new FlowLayout());
nextOrder = new JButton("Next Order Set");
nextOrder.addActionListener(new OrderUpListener(list));
southpanel.add(nextOrder);
main_panel.add(southpanel, BorderLayout.SOUTH);
}
public static void main(String[] args) {
KitchenUserInterface dat = kitchenRunner.getInstance();
try{
Thread.sleep(1500);
System.out.println("Ready");
dat.setList(OrderArray.getInstance().getOrders());
}
catch(Exception event) {
System.out.println("Error sleep");
System.out.println(event);
}
}
}
你应该使用这段代码
this.setVisible(false); //this will close frame i.e. NewJFrame
new NewJFrame().setVisible(true); // Now this will open NewJFrame for you again and will also get refreshed