繁体   English   中英

如何在Java中对齐JPanel

[英]How to align JPanel in java

我有一个处于框式布局的JPanel,但是我不确定如何将JPanel对准窗口的中心(即使窗口大小已调整,也要保持居中)。我试图寻找解决方案,但是与我要寻找的是什么。

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

public class Stacker extends JFrame {
public Stacker() {
    super("Stacker");
    setSize(430, 200);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    // create top panel
    JPanel commandPane = new JPanel();
    BoxLayout vertical = new BoxLayout(commandPane,
        BoxLayout.Y_AXIS);
    commandPane.setLayout(vertical);

    JButton subscribe = new JButton("Subscribe");
    JButton unsubscribe = new JButton("Unsubscribe");
    JButton refresh = new JButton("Refresh");
    JButton save = new JButton("Save");

    commandPane.add(subscribe);
    commandPane.add(unsubscribe);
    commandPane.add(refresh);
    commandPane.add(save);

    JMenuItem j1 = new JMenuItem("File");
    JMenuItem j2 = new JMenuItem("Open");
    JMenuItem j3 = new JMenuItem("Close");
    JMenuBar menubar = new JMenuBar();
    JMenu menu = new JMenu("Feeds");
    menu.add(j1);
    menu.add(j2);
    menu.add(j3);
    menubar.add(menu);

    setJMenuBar(menubar);



    // create bottom panel
    /*JPanel textPane = new JPanel();
    JTextArea text = new JTextArea(4, 70);
    JScrollPane scrollPane = new JScrollPane(text);
    // put them together
    FlowLayout flow = new FlowLayout();
    setLayout(flow);
    add(commandPane);
    add(scrollPane); */
    setJMenuBar(menubar);
    add(commandPane);
    setVisible(true);
}

public static void main(String[] arguments) {
    Stacker st = new Stacker();
}
}

您说您正在使用BoxLayout,但是具有BoxLayout的JPanel是您要居中的JPanel,还是包含您要居中的JPanel?

如果其中包含要居中的JPanel,则可以在要居中的JPanel的任一侧添加胶水。 如果它您要居中的JPanel,则可以使用GridBagLayout或BoxLayout达到您所讨论的效果。

搜寻类似“ Java中心组件”之类的内容将为您带来大量结果。

对于这个想法(从您的描述中仍然不清楚),请使用未设置GridBagConstraints的 GridBagLayout

在此处输入图片说明

在此处输入图片说明

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

public class CenteredJPanel {

    private JFrame frame = new JFrame("Test");
    private JPanel panel = new JPanel();
    private JButton subscribe = new JButton("Subscribe");
    private JButton unsubscribe = new JButton("Unsubscribe");
    private JButton refresh = new JButton("Refresh");
    private JButton save = new JButton("Save");

    public CenteredJPanel() {
        panel.setLayout(new GridBagLayout());
        panel.add(subscribe);
        panel.add(unsubscribe);
        panel.add(refresh);
        panel.add(save);
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.add(panel);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM