java - 如何使用 Swing 创建布局?

标签 java swing layout-manager

我想设计像框架一样使用四个面板,考虑到放大和缩小屏幕...

喜欢这个设计:

JPanel testPanel = new JPanel();
testPanel.setBorder(BorderFactory.createLineBorder(Color.black));
frame.add(testPanel, BorderLayout.NORTH);

JPanel testPanel1 = new JPanel();
testPanel1.setBorder(BorderFactory.createLineBorder(Color.black));
frame.add(testPanel1, BorderLayout.NORTH);

JPanel testPane2 = new JPanel();
testPane2.setBorder(BorderFactory.createLineBorder(Color.black));
frame.add(testPane2, BorderLayout.EAST);

JPanel testPane3 = new JPanel();
testPane3.setBorder(BorderFactory.createLineBorder(Color.black));
frame.add(testPane3, BorderLayout.CENTER);

最佳答案

你可以...

使用GridBagLayout...

Example

import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.CompoundBorder;
import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder;

public class Test {

    public static void main(String[] args) {
        new Test();
    }

    public Test() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame frame = new JFrame();
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        public TestPane() {
            setLayout(new GridBagLayout());

            GridBagConstraints gbc = new GridBagConstraints();
            gbc.gridx = 0;
            gbc.gridy = 0;
            gbc.weightx = 1;
            gbc.fill = GridBagConstraints.BOTH;
            add(makePanel("panel 2"), gbc);
            gbc.gridy++;
            add(makePanel("panel 3"), gbc);
            gbc.gridy++;
            gbc.weighty = 0.66;
            gbc.weightx = 0.66;
            add(makePanel("panel 3"), gbc);

            gbc.gridx++;
            gbc.gridy = 0;
            gbc.gridheight = gbc.REMAINDER;
            add(makePanel("panel 1"), gbc);
        }

        protected JPanel makePanel(String name) {
            JPanel panel = new JPanel(new GridBagLayout());
            panel.add(new JLabel(name));
            panel.setBorder(new CompoundBorder(new LineBorder(Color.DARK_GRAY), new EmptyBorder(10, 10, 10, 10)));
            return panel;
        }

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(500, 400);
        }



    }

}

你可以...

还可以使用复合布局,这在规则复杂和/或仅影响某些组件的情况下很有用。

您可能使用哪种方法取决于您想要实现的目标,归根结底,没有硬性规定,您需要查看基本要求并考虑哪种方法是最好的 - 不要不要忘记,您可以结合不同的方法来构建不同的解决方案

别忘了看看Laying Out Components Within a Container了解更多详情

关于java - 如何使用 Swing 创建布局?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51487923/

相关文章:

java - 使用 LayoutManager 面板不显示在 JFrame 中

java - 如何在同一台机器上用Java测试广播udp包?

java - 在 Java Swing 中换行文本

java - 如何获取员工 ID 并将其放入其他元素中

java - jPanel 调整大小后 jScrollPane 滚动消失

Java MVC 模型 View Dao 分离

java - Apache poi 创建错误的 Excel 文件

java - 如何将两个 View 堆叠在一起?

java - 获取以下内容以返回文本文件中具有特定格式的所有 url

java - 使用 Java EE 将文件存储在云端