JOptionPane确认对话后,canvas右下两边的白条?

那么伙计们,使用JOptionPane向用户询问应用程序是否应该更新,之后我会在canvas的底部和右侧看到这些白条。 尝试删除自动更新的东西,并正常工作。 这是我的代码

 GameUtils.init(); String version = AutoUpdate.checkForUpdates(); if (Double.parseDouble(version) > AutoUpdate.VERSION) { AutoUpdate.update(version); JFrame frame = null; try { frame = new JFrame(GameUtils.data.getString("title")); } catch (JSONException e) { e.printStackTrace(); } frame.getContentPane().setPreferredSize(new Dimension(1000, 500)); frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); frame.setResizable(false); frame.pack(); frame.setLocationRelativeTo(null); GameUtils.instance = new Game(frame); frame.addWindowListener(new WindowListener() { @Override public void windowOpened(WindowEvent e) { } @Override public void windowClosing(WindowEvent e) { GameUtils.instance.stop(); System.exit(0); } @Override public void windowClosed(WindowEvent e) { } @Override public void windowIconified(WindowEvent e) { } @Override public void windowDeiconified(WindowEvent e) { } @Override public void windowActivated(WindowEvent e) { } @Override public void windowDeactivated(WindowEvent e) { } }); frame.setVisible(true); GameUtils.instance.start(); } 

这是它的样子 协调系统正常工作我希望它看起来像这样 我希望它看起来像这样

当我在JFrame中使用setResizable(false)和pack()方法时,我注意到了同样的问题。 在这里你可以找到一个描述问题的答案,但我没有找到适合我的解决方案。

在我的应用程序中,如果需要,我使用一种“技巧”:我检查contentPane首选宽度是否等于他的有效宽度,如果不是我回想起pack()方法。

就像是:

 for(int i=0;i<5 && contentPane.getPreferredSize().width!=contentPane.getSize().width;i++) frame.pack(); 

当然这不是一个非常好的解决方案,但它适用于我,如果你使用参数来限制pack()应该发生的最大次数,你就不会有阻止gui的风险......