【发布时间】:2019-04-17 22:33:30
【问题描述】:
我目前有 2 个 JPanel 被添加到 JFrame。调整窗口大小后,只有最近添加的 JPanel 会调整大小。如何确保所有 JPanel 都调整大小?在我的程序中,我发射了一个烟花并有网格线。我希望每个人都拥抱屏幕底部。
使用此代码,发射的烟花会调整大小以拥抱,但网格线不会:
JFrame frame = new JFrame();
frame.setSize(950,800);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
GuiTest test = new GuiTest();
frame.add(test, BorderLayout.PAGE_END);
frame.setVisible(true);
Grid grid = new Grid();
frame.add(grid);
frame.setVisible(true);
FireworkP canvas = new FireworkP(150, 45, 7, 2);
frame.add(canvas);
frame.setVisible(true);
frame.getContentPane().setBackground(Color.BLACK);
frame.setVisible(true);
使用此代码,会发生相反的情况:
JFrame frame = new JFrame();
frame.setSize(950,800);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
GuiTest test = new GuiTest();
frame.add(test, BorderLayout.PAGE_END);
frame.setVisible(true);
FireworkP canvas = new FireworkP(150, 45, 7, 2);
frame.add(canvas);
frame.setVisible(true);
frame.getContentPane().setBackground(Color.BLACK);
frame.setVisible(true);
Grid grid = new Grid();
frame.add(grid);
frame.setVisible(true);
默认状态:https://i.imgur.com/cpzpBha.png
代码 1 已调整大小:https://i.imgur.com/SRdh2oA.png
代码 2 已调整大小:https://i.imgur.com/VHY4Ff1.png
【问题讨论】:
-
所有 Swing 组件在调整大小时都应该重新绘制自己。您可能应该假设一个 JPanel 未调整大小或由于其他原因未更新。您是否在使用任何自定义(不是 Swing,而是您自己的作品)组件?
-
您使用不同的参数调用了两次
frame.add(canvas);。只有最后一个将处于活动状态。一次只能有一个主要内容。 -
那么有没有办法拥有一个单独的网格线类,或者我应该将它们组合起来?我不明白为什么他们都不活跃。
-
如需尽快获得更好的帮助,请发帖minimal reproducible example 或Short, Self Contained, Correct Example。
标签: java swing graphics jframe jpanel