将Java中的JPanel高度设置为窗口高度的百分比

4

我一直在尝试将JPanel的高度设置为窗口高度的80%。无论我怎么做,都会创建一个小矩形或填满整个窗口。目前,这是我的代码;

Toolkit tk = Toolkit.getDefaultToolkit();  
int xSize = ((int) tk.getScreenSize().getWidth());  
int ySize = ((int) tk.getScreenSize().getHeight());  
window.setSize(xSize,ySize);
JPanel p = new JPanel();
p.setBackground(Color.PINK);
p.setLayout(new BorderLayout());
int gameHeight = (int)(Math.round(ySize * 100.0/window.getHeight()));
int gameWidth = (int)(Math.round(xSize * 100.0/window.getWidth()));
p.setPreferredSize(new Dimension(gameHeight, gameWidth));
p.add(new JLabel(" "));
window.add(p, BorderLayout.SOUTH);

我只想指出一件事。如果您希望窗口大小为屏幕大小的80%,则应将框架设置为80%。将面板设置为80%意味着框架大小约为82-85%。 - user1181445
1个回答

6
你的计算略有偏差。
要获得一个值的80%,你应该将其乘以0.80,因此你需要将面板高度设置为ySize * 0.80,将面板宽度设置为xSize * 0.80
int gameHeight = (int) (Math.round(ySize * 0.80));
int gameWidth = (int) (Math.round(xSize * 0.80));
p.setPreferredSize(new Dimension(gameWidth, gameHeight));

谢谢您的快速回复,但在这个问题和Quirliom的答案中,面板占据了整个窗口,即使我玩弄数学公式也无济于事。当然,我的数学很糟糕,我是个废物lol。 - YepNepDep
你是否在任何时候调用了 pack() 方法来打包你的窗体对象?为了让首选大小生效,您需要这样做。或者,使用 p.setSize(gameWidth, gameHeight) - FThompson
另外,我刚刚注意到高度和宽度参数被交换了;我现在正在我的答案中修复它。 - FThompson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接