JAVA:如何调整JPanel的大小
Posted
技术标签:
【中文标题】JAVA:如何调整JPanel的大小【英文标题】:JAVA : How to resize JPanel 【发布时间】:2022-01-17 14:58:01 【问题描述】:我想更改JPanel
的大小。我试过setSize
(本论坛提出的解决方案),但它对我不起作用。
JFrame
代码:
JFrame f =new JFrame();
f.setTitle("test");
f.setSize(300,400);
f.setLocationRelativeTo(null);
f.setResizable(false);
f.setLayout(null);
JPanel
代码:
JPanel display= new JPanel();
display.setLayout(null);
JTextField txt = new JTextField(30);
display.add(txt,BorderLayout.NORTH);
display.setBackground(Color.gray);
display.setSize(30,17);
【问题讨论】:
您可以使用setPreferredSize()
和这样的方法,但如果框架的布局或您添加面板的任何内容由布局管理器管理,则最终将负责大小。理想情况下不要调用display.setLayout(null);
,即保留原始布局管理器或将其替换为合理的东西,让它从面板的内容中找出面板的首选尺寸。
正如@Thomas 所说,您应该使用正确的布局。不过,问题不在于这段代码,因此您在创建 Frame 时可能做错了其他事情。
请不要通过 cmets 或答案添加信息,而是 edit 您的问题。你也可以阅读How to Ask。
所以你的框架也没有布局管理器?如果您添加了面板,请查看设置位置和大小的 setBounds()
方法。
我试了一下,还是不行
【参考方案1】:
这是一个完整且可编译的示例,可以做您想做的事情。
import javax.swing.*;
import java.awt.*;
public class ResizableJPanel
public static void main(String[] args)
JFrame frame = new JFrame(" with a panel");
Container content = frame.getContentPane();
content.setLayout(null);
JPanel panel = new JPanel();
panel.setOpaque( true);
panel.setBackground( Color.BLACK );
panel.setBounds( 200, 200, 400, 400);
content.add(panel);
frame.setSize(800, 800);
frame.setVisible(true);
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
您可以更改 setBounds 的值来移动或调整面板大小。
您遗漏了一些重要的部分:如何将面板添加到 JFrame?你目前的方法有什么问题?
如果您的文本字段没有显示,那是因为您的 JPanel 非常小,并且布局为空。
panel.setLayout(null);
JTextField field = new JTextField(30);
panel.add(field);
field.setBounds( 50, 110, 30, 17 );
这将添加字段并为其指定大小。 在这里使用空布局很糟糕,因为布局管理器会处理 TextField 的大小。
【讨论】:
我使用 setcontentpane 将面板添加到 jframe,我是初学者,我不明白你为什么使用 add 而不是 setcontentpane 当我使用 frame.add 添加面板时,它有时会工作,有时程序会在执行时显示一个空窗口。 @hepona API 有一点歧义。 JFrame 具有在内容窗格上操作的方法,例如。 JFrame.setLayout 本质上是:jframe.getContentPane().setLayout()
。我喜欢明确。由于我使用了现有的内容窗格,因此我不必再次获取它。对于第二个问题,最好看完整的代码。 (甚至可能是一个新问题?)另外,当你调整窗口大小时它会出现吗?以上是关于JAVA:如何调整JPanel的大小的主要内容,如果未能解决你的问题,请参考以下文章
如何在 GridBagLayout 中调整 JPanel 的大小?