Java 如何调整JPanel的大小

Java 如何调整JPanel的大小,java,swing,jpanel,Java,Swing,Jpanel,我正在尝试调整JPanel的大小,但它下面有一个空间。这里有一个链接显示: And this is the code : import java.awt.*; import javax.swing.*; public class Ex1 extends JFrame{ private JTextArea textarea = new JTextArea (); private JTextField field = new JTextField ();`` private JButton

我正在尝试调整JPanel的大小,但它下面有一个空间。这里有一个链接显示:

  And this is the code :


import java.awt.*;
import javax.swing.*;

public class Ex1 extends JFrame{
private JTextArea textarea = new JTextArea ();
private JTextField field = new JTextField ();``
private JButton buton = new JButton ("Trimite");

public Ex1(){
    JPanel panel = new JPanel (new BorderLayout(2,2));
    JPanel panel1 = new JPanel (new BorderLayout(2,2));
    JPanel panel2 = new JPanel (new BorderLayout(2,2));
    JLabel label1 = new JLabel ("Mesaje");
    JLabel label2 = new JLabel ("Scrieti un mesaj");
    panel1.setPreferredSize(new Dimension(350,100));
    panel2.setPreferredSize(new Dimension(350,25));
    panel1.add(label1, BorderLayout.NORTH);
    panel1.add(textarea, BorderLayout.CENTER);
    panel2.add(label2, BorderLayout.WEST);
    panel2.add(field, BorderLayout.CENTER);
    panel2.add(buton, BorderLayout.EAST);
    setLayout(new GridLayout(2,1,1,1));
    panel.add(panel1, BorderLayout.NORTH);
    panel.add(panel2, BorderLayout.CENTER);
    add(panel);

}

public static void main(String[] args) {
    JFrame frame = new Ex1();
    frame.pack();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
}


}

您需要调整JFrame而不是JPanel的大小。尝试:

this.setPreferredSize(new Dimension(350, 25);// in Ex1
或者在您的主要方法中:

frame.setPreferredSize(new Dimension(350, 25);

您需要调整JFrame而不是JPanel的大小。尝试:

this.setPreferredSize(new Dimension(350, 25);// in Ex1
或者在您的主要方法中:

frame.setPreferredSize(new Dimension(350, 25);

您正在将框架的布局设置为
GridLayout
,其中所有组件的大小都相同。您有两行,
add(panel)
将面板添加到网格的第一行。第二行留空。看

注释掉
setLayout(新的GridLayout(2,1,1,1))和多余的空间应该消失。注释此行时,框架内容窗格的布局将为
BorderLayout
JFrame
的默认布局是
BorderLayout
。So<代码>添加(面板)将面板添加到框架内容窗格的中心。因此,面板应占据所有可用空间

作为旁注,请避免设置PreferredSize()
,通常不需要,请参阅以了解详细信息

您可以指定文本区域的行数和列数,并将其包装在滚动窗格中,即:

textArea = new JTextArea(5, 20);
JScrollPane scrollPane = new JScrollPane(textArea);
有关更多详细信息,请参阅

编辑:getPreferredSize()的示例


您正在将框架的布局设置为
GridLayout
,其中所有组件的大小都相同。您有两行,
add(panel)
将面板添加到网格的第一行。第二行留空。看

注释掉
setLayout(新的GridLayout(2,1,1,1))和多余的空间应该消失。注释此行时,框架内容窗格的布局将为
BorderLayout
JFrame
的默认布局是
BorderLayout
。So<代码>添加(面板)将面板添加到框架内容窗格的中心。因此,面板应占据所有可用空间

作为旁注,请避免设置PreferredSize()
,通常不需要,请参阅以了解详细信息

您可以指定文本区域的行数和列数,并将其包装在滚动窗格中,即:

textArea = new JTextArea(5, 20);
JScrollPane scrollPane = new JScrollPane(textArea);
有关更多详细信息,请参阅

编辑:getPreferredSize()的示例


那是框架,不是面板。调整框架大小如果你有足够的时间和耐心…一种方法是你使用绝对布局(对于非常小的项目……它有更多的时间…但是你可以将每个组件安排在你想要的绝对位置和大小…:-)那是框架,不是面板。调整框架大小如果你有足够的时间和耐心…一种方法是你使用绝对布局(对于非常小的项目……它有更多的时间…但是你可以将每个组件安排在你想要的绝对位置和大小…:-)非常感谢。真的很有帮助还有一个问题:如果我希望帧的大小为350 x 300英寸,只显示第一个面板:-(@Angelo如何设置350x300大小?是的。主要是我想要“frame.setSize(350300))@Angelo I无法在仅显示一个面板的情况下真实再现这种情况。在任何情况下,请为文本组件指定所需的行数和列数。还要覆盖
getPreferredSize()
(添加到框架内容中的面板)的
以返回(350300)。然后
pack()
框架。您可能还希望将
panel1
放在
中心
panel2
放在
南部
中,这样文本区域就占据了更多的空间。谢谢!真的很有帮助再问一个问题:如果我希望框架的大小为350 x 300英寸,那么只显示第一个面板:-(@Angelo您如何设置350x300大小?是的。在main中,我想要“frame.setSize(350300)@Angelo当只显示一个面板时,我无法真正复制大小写。在任何情况下,请为文本组件指定所需的行数和列数。还可以覆盖
面板的
getPreferredSize()
(添加到框架内容中的内容)返回(350300)。然后
pack()
框架。您可能还希望将
panel1
放在
中心
中,将
panel2
放在
南部
中,这样文本区域就占据了更多的空间。请尝试使用收边来重置窗口大小,使用收边来重置窗口大小