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的大小的主要内容,如果未能解决你的问题,请参考以下文章

自动调整大小和滚动的 Java JTextArea

如何在 GridBagLayout 中调整 JPanel 的大小?

如何做到这一点,以便当我将可动态调整大小的 JPanel 放入 JScrollPane 时它​​可以工作?

JPanel 在调整 Jframe 大小之前不会更新

JPanel调整大小没有发生

如何设置java中panel的大小?