java - 调整 JPanel 的高度

标签 java swing layout-manager flowlayout

enter image description here我有一个带有流布局的顶部面板,其中有一个文本字段和标签。我需要在第一行下方添加更多文本字段和标签。我意识到没有真正的方法可以在流程布局中强制添加一条新线,因此我只想制作一个新面板并将其放在顶部面板下方。问题是现在存在间隙,因为顶板高度太高。有没有办法调整面板大小,使其宽度自动调整到屏幕,但我想调整新面板的高度,使间隙更小。顶部的两个文本字段位于具有流布局的顶部面板中,下面的 3 个文本字段位于具有流布局的新面板中,有没有办法使 3 个文本字段位于顶部的 2 个文本字段的正下方?此外,整个框架采用网格布局。

frame.setLayout(new GridLayout(0,1));
Static JPanel topPanel = new JPanel(new flowlayout);
Static JPanel searchPanel = new JPanel(new flowlayout);
Static JPanel statusPanel = new JPanel(new gridLayout(2,1));
Static JPanel categoryPanel = new JPanel(new GridLayout(0.2));
Static JPanel btnPanel = new JPanel(new GridLayout(0,3));
frame.pack();
topPanel.add(searchPanel);
JPanel container2 = new JPanel(new BorderLayout()):
container2.add(topPanel, BorderLayout.North);
frame.getContentPane().add(container2);
frame.getContentPane().add(statusPanel);
frame.getContentPane().add(catergoryPanel);
frame.getContentPane().add(btnPanel);

最佳答案

带有 GridLayoutJPanel 是问题所在 - 它可能被添加到容器的 BorderLayout.CENTER 中,因此它会延伸到整个容器可用空间。它还具有相同的单元尺寸。将网格包装到 BorderLayout 中并将其添加到 BorderLayout.NORTH 或使用 GridBagLayout 作为面板。

<小时/>

enter image description here

下面是一个示例,演示了面板在您的示例中的布局方式以及在其他布局中的布局方式。我认为这会清楚地说明为什么您的 GridLayout 会以这种方式表现。

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Insets;

import javax.swing.BorderFactory;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Example {

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Example();
            }
        });
    }

    public Example() {

        // GridLayout

        JPanel container1 = new JPanel(new GridLayout(2, 1));
        container1.add(createExamplePanel());
        container1.add(createExamplePanel());

        // GridLayout inside BorderLayut (NORTH)

        JPanel panel = new JPanel(new GridLayout(2, 1, 0, 5 /* margin */)); // You could also use other layouts here, e.g. a BoxLayout
        panel.add(createExamplePanel());
        panel.add(createExamplePanel());
        JPanel container2 = new JPanel(new BorderLayout());
        container2.add(panel, BorderLayout.NORTH);

        // GridBagLayout

        JPanel container3 = new JPanel(new GridBagLayout());
        GridBagConstraints constraints = new GridBagConstraints();
        constraints.anchor = GridBagConstraints.PAGE_START;
        constraints.fill = GridBagConstraints.HORIZONTAL;
        constraints.insets = new Insets(0, 0, 5 /* margin */, 0);
        constraints.weightx = 1.0;
        container3.add(createExamplePanel(), constraints);
        constraints.gridy = 1;
        constraints.weighty = 1.0;
        constraints.insets = new Insets(0, 0, 0, 0);
        container3.add(createExamplePanel(), constraints);

        JPanel contentPane = new JPanel(new GridLayout(1, 3, 5, 5));
        contentPane.add(createTitledPanel(container1, "GridLayout"));
        contentPane.add(createTitledPanel(container2, "GridLayout inside BorderLayout (NORTH)"));
        contentPane.add(createTitledPanel(container3, "GridBagLayout"));

        JFrame frame = new JFrame("Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setContentPane(contentPane);
        frame.setSize(800, 600);
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    private JPanel createTitledPanel(JComponent content, String title) {
        JPanel panel = new JPanel(new BorderLayout());
        panel.add(content);
        panel.setBorder(BorderFactory.createTitledBorder(title));
        return panel;
    }

    private JPanel createExamplePanel() {
        JPanel panel = new JPanel();
        panel.add(new JLabel("Panel"));
        panel.setBorder(BorderFactory.createLineBorder(Color.GRAY));
        return panel;
    }

}

关于java - 调整 JPanel 的高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38490258/

相关文章:

java - 什么是类描述符?

java - 我怎样才能制作像所附 gif 那样的布局?

java - 如何在我的 JFrame 中调整这些面板的大小?

java - 如何处理不同的屏幕尺寸

java - EditText 下一个 Button 键盘

java - 如何让 EDT 等待后台线程?

java - postgres中使用java的相关字段

Java Swing : implementing my Comboboxmodel for JComboBox

java - JFileChooser 即使在输入名称后也不保存文件

java - 如何将文本文件中的ArrayList填充到JCombobox