【发布时间】:2016-08-04 21:32:51
【问题描述】:
我的应用程序在 Eclipse IDE 上运行良好,但导出后,名声不会重新绘制。 我正在尝试通过删除两个 JPanel 并使用更多面板再次添加它们来重建 JFrame 的布局,这是我的代码:
应用首先调用 buildGUI()
private void buildGUI(){
setTitle("MyApp");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setContentPane(new BackGroundImagePanel());
setResizable(false);
getContentPane().setLayout(new GridBagLayout());
c = new GridBagConstraints();
/*
*set up GridBagConstraints and add the two panels
*/
pack();
setSize(700, 700);
revalidate();
setLocationRelativeTo(null);
}
根据用户输入进行一些计算并调用 reBuildGUI():
private void reBuildGUI(){
//Clean the frame.
remove(firstPanel);
remove(secondPanel);
//removeAll() doesn't work for me;
validate();
repaint();
/*
*set up GridBagConstraints and more panels
*/
pack();
setSize(700, 700);
repaint();
validate();
}
再次,应用程序在 IDE 上运行良好,但不是作为独立的 jar,在调用 reBuildGUI() 时没有任何反应! 尝试以不同的顺序使用 validate()、revalidate() 和 pack() 没有任何收获?
【问题讨论】:
-
除了确保您将所有图像作为课程资源而不是文件获取之外,如果您没有发布minimal reproducible example,不确定如何回答这个问题。如果您仍然需要帮助,请努力隔离错误并发布您的 MCVE。
-
不要使用
setSize()和pack(),如果您希望JFrame具有特定大小,请使用setSize()或 如果您希望JFrame成为适合其子组件的最小尺寸,请使用pack()。
标签: java swing user-interface repaint validate-request