【发布时间】:2013-01-30 02:33:52
【问题描述】:
我想要一个 JFrame,左右两边各有一个边框,颜色为黑色,宽度为 withfOfJFrame/10。
现在,我的尝试是这样的:
JFrame f = new JFrame();
f.setSize(800, 600);
f.setLayout(new BorderLayout());
JPanel leftBorder = new JPanel();
JPanel rightBorder = new JPanel();
leftBorder.setBackground(Color.black);
rightBorder.setBackground(Color.black);
leftBorder.setSize(f.getWidth()/10, f.getHeight());
rightBorder.setSize(f.getWidth()/10, f.getHeight());
JPanel center = new JPanel();
center.setBackground(Color.red);
f.add(leftBorder, BorderLayout.WEST);
f.add(center, BorderLayout.CENTER);
f.add(rightBorder, BorderLayout.EAST);
f.setVisible(true);
这会在左侧和右侧添加一个黑色边框,但该边框具有固定大小,并且在调整窗口大小时不会重新计算。大小甚至不是 800 的 1/10(JFrame 的开始宽度)。
我做错了什么?还是有更好的方法来做到这一点?
【问题讨论】:
-
setSize()在程序创建时只调用一次。在程序调整大小时不会在数学上重新调用它。我想知道您是否需要为此编写自己的边框或布局管理器。 -
问题是它甚至在一开始就没有采用正确的尺寸......
-
可能是因为您在呈现 GUI 之前调用了
getWidth()和getHeight()。我自己,我通常使用getPreferredSize()更频繁。 -
你期待什么?调整大小(和定位)是 LayoutManager 的专有任务,因此任何 setSize 对子项的影响都为零。
-
你可以试试ComponentListener。当调整帧大小时,调用相应的方法并说 panel.revalidate
标签: java swing jpanel border-layout