java - 使用 BorderLayout.centre 将 JPanel 放置在中心,在所有 4 个方向上间隔 50 像素

标签 java swing border-layout

我有一个带有 BorderLayout 的 JFrame,我想在 JFrame 的中心放置一个 JPanel,但在所有方向上都有 50 像素的空间。那是!当我们在 BorderLaout 的中心添加一个组件时,它会覆盖父级的所有空间,但我想在所有 4 个方向上保留空间。我所做的是,我刚刚在北、南、东、西创建了宽度和高度均为 50 像素的面板。这是代码。

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.Component;
import java.awt.Color;
import java.awt.Dimension;


public class Abc extends JFrame {

    private JPanel contentPane;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Abc frame = new Abc();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public Abc() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new BorderLayout(0, 0));
        setContentPane(contentPane);

        JPanel panel = new JPanel();
        panel.setPreferredSize(new Dimension(10, 50));
        contentPane.add(panel, BorderLayout.NORTH);

        JPanel panel_1 = new JPanel();
        panel_1.setPreferredSize(new Dimension(50, 10));
        contentPane.add(panel_1, BorderLayout.WEST);

        JPanel panel_2 = new JPanel();
        panel_2.setPreferredSize(new Dimension(10, 50));
        contentPane.add(panel_2, BorderLayout.SOUTH);

        JPanel panel_3 = new JPanel();
        panel_3.setPreferredSize(new Dimension(50, 10));
        contentPane.add(panel_3, BorderLayout.EAST);
    }

}

我需要的是一种在各个方向创建空间的简单方法,而不是像我在这段代码中所做的繁琐工作。 BorderLayout 是否有任何方法或构造函数?

最佳答案

演示使用 EmptyBorder 的示例代码:

package snippet;
import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.Box;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder;

import java.awt.Component;
import java.awt.Color;
import java.awt.Dimension;


public class Abc extends JFrame {

    private JPanel contentPane;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Abc frame = new Abc();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public Abc() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(50, 50, 50, 50));
        contentPane.setLayout(new BorderLayout());
        JPanel panel = new JPanel();
        panel.setBorder(new LineBorder(Color.black));
        contentPane.add(panel);
        setContentPane(contentPane);

    }
}

关于java - 使用 BorderLayout.centre 将 JPanel 放置在中心,在所有 4 个方向上间隔 50 像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32325296/

相关文章:

java - 如何让 FlowLayout 在调整大小时重新定位组件。

java - 调整 JPanel BorderLayout Java 的大小

java - Excel 自动化与 Cucumber 框架集成

java - JDialog 调整大小时不剪切底部面板

java - 如何将带有图像的 JButton 放在另一个带有图像的 JButton 之上?

java - BorderLayout West Center East all 等宽

java - 如何使用 JPA/EclipseLink 实现动态 Multi-Tenancy 或动态表过滤?

java - Checkstyle 升级后如何验证自定义配置 xml

Java从二进制文字字符串中解析int/long

java - SwingWorker的execute()方法似乎没有做任何事情