Java 2 JPanel 在一个 JFrame 布局中

标签 java swing

您好,我正在尝试将 2 个 JPanel 添加到 JFrame 中,它们占据 JFrame 的全部宽度和高度。我设法使用 GridBagLayout() 添加它们,但我似乎无法使用 setsize 设置 JPanel 的大小()。我也尝试过使用 ipady 和 ipadx,但在我添加了一些按钮后,一开始似乎可以工作,整个布局变得一团糟。这是我的代码:

           JFrame tradeframe = new JFrame("Trade");
           JPanel P1panel = new JPanel();         
           P1panel.setBackground(Color.red);
           JPanel P2panel = new JPanel();
           P2panel.setBackground(Color.BLACK);


           tradeframe.setVisible(true);
           tradeframe.setSize(600, 400);
           tradeframe.setResizable(false);
           tradeframe.setLocationRelativeTo(null);
           tradeframe.setLayout(new GridBagLayout());

           P1panel.add(new JButton ("P1 Agree"));

           P2panel.add(new JButton ("P2 Agree"));


           GridBagConstraints a = new GridBagConstraints();
           a.gridx = 0;
           a.gridy = 0;
           a.weightx = 360;
           a.weighty = 300;
           //a.fill = GridBagConstraints.HORIZONTAL;
           tradeframe.add(P1panel , a);

           GridBagConstraints b = new GridBagConstraints();
           b.gridx = 1;
           b.gridy = 0;
           b.weightx = 360;
           b.weighty = 300;
          // b.fill = GridBagConstraints.HORIZONTAL;
           tradeframe.add(P2panel , b);

如何让每个 JPanel 的宽度为 300px,高度为 400px?

最佳答案

GridBaglayout你必须设置

  • 填充

  • anchor

  • weightx 和 weighty

  • gridx/gridy(取决于方向)

然后是可能的例子

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

public class BorderPanels extends JFrame {

    private static final long serialVersionUID = 1L;

    public BorderPanels() {
        setLayout(new GridBagLayout());// set LayoutManager
        GridBagConstraints gbc = new GridBagConstraints();
        JPanel panel1 = new JPanel();
        Border eBorder = BorderFactory.createEtchedBorder();

        panel1.setBorder(BorderFactory.createTitledBorder(eBorder, "20pct"));
        gbc.gridx = gbc.gridy = 0;
        gbc.gridwidth = gbc.gridheight = 1;
        gbc.fill = GridBagConstraints.BOTH;
        gbc.anchor = GridBagConstraints.NORTHWEST;
        gbc.weightx = gbc.weighty = 20;
        add(panel1, gbc); // add compoenet to the COntentPane

        JPanel panel2 = new JPanel();
        panel2.setBorder(BorderFactory.createTitledBorder(eBorder, "60pct"));
        gbc.gridy = 1;
        gbc.weightx = gbc.weighty = 60;
        //gbc.insets = new Insets(2, 2, 2, 2);
        add(panel2, gbc); // add component to the COntentPane

        JPanel panel3 = new JPanel();
        panel3.setBorder(BorderFactory.createTitledBorder(eBorder, "20pct"));
        gbc.gridy = 2;
        gbc.weightx = gbc.weighty = 20;
        gbc.insets = new Insets(2, 2, 2, 2);
        add(panel3, gbc);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // important
        pack();
        setVisible(true); // important
    }

    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() { // important

            public void run() {
                BorderPanels borderPanels = new BorderPanels();
            }
        });
    }
}

在大多数情况下,使用另一个 LayoutManager 会更好

关于Java 2 JPanel 在一个 JFrame 布局中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9667722/

相关文章:

java - 如何使用 apache tomcat 在 spring boot 中设置 root url?

java - 我没有得到列名

java - 如何在 JPanel 对象上调用 getWidth

java - Swing刷新周期

Java javax 计时器问题?

不移动鼠标光标时 Java 动画卡顿

java - 使用 Java 反射动态创建 JSF 表单

java - .NET GC 卡在来自 finalizer() 的 JNI 调用上

java - 方法中变量重复的目的是什么?

java - 从外部配置文件读取值返回空值