我正在编写一个JPanel,它在flowlayout中加载标签,其信息来自数据库表的列。我不相信这是相关的,因为加载数据不需要很长时间,只有“setVisible”需要一段时间来处理。
我看到的不幸效果是加载的标签(比方说100个标签)看起来像是一次放置一个。虽然它确实在一秒钟内发生,但我更倾向于首先加载所有加载,然后立即加入。
我一直认为,当您添加组件时,一切都已完成,而setVisible(true / false)只是打开和关闭可见性。但是由于这个问题,我发现也许并不是它的确切运作方式。
这是我的主要方法(如果需要,我可以提供更多代码):
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
JFrame window = new JFrame();
window.setBounds(100, 100, 450, 300);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.getContentPane().setLayout(new BorderLayout());
JobInfoPanel jobInfoPanel = new JobInfoPanel();
window.getContentPane().add(jobInfoPanel,
BorderLayout.CENTER);
window.pack();
window.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
向我确认问题在于setVisible的事情是我在window.setVisible(true)之后添加以下代码;出现同样的问题:
jobInfoPanel.setPanelListVisible(false);
jobInfoPanel.setPanelListVisible(true);
我尝试了很多东西,似乎没什么用,包括放置“jobInfoPanel.setPanelListVisible(false);”在window.setVisible(true)之前。同样的事情发生了。
我认为我留下的唯一解决方案是以某种方式将此面板绘制在屏幕外,然后将其快速移动到正确的位置......如果这有任何意义(我在某些页面上将其视为建议,但这个特殊问题并没有经常提出来。)
有没有更简单的方法来做我需要的事情?
非常感谢任何和所有帮助,谢谢。
-Asaf
答案 0 :(得分:2)
答案 1 :(得分:0)
我感谢大家的回复,但能够通过制作一个单独的方法来解决这个问题,该方法初始化了这个面板并在主方法中调用它后面的pack(),如下所示:
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
JFrame window = new JFrame();
window.setBounds(100, 100, 450, 300);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.getContentPane().setLayout(new BorderLayout());
JobInfoPanel jobInfoPanel = new JobInfoPanel();
window.getContentPane().add(jobInfoPanel,
BorderLayout.CENTER);
window.pack();
jobInfoPanel.createDriverListPanel();
window.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
我无法完全解释为什么会有效,但它确实完全符合我的要求。而不是一次看到一个标签,它们只是一次弹出。
再次感谢你, -Asaf