java - 为什么 GridBagLayout 不创建第三列?

标签 java swing gridbaglayout

我需要创建一个 3 列 5 行的表单

+---+-----------+
|   |           |
|   +-----+-----+
|   |     |     |
|   +-----+-----+
|   |     |     |
|   +-----+-----+
|   |     |     |
|   +-----+-----+
|   |     |     |
+---+-----+-----+

但是 GridBagLayout 将所有元素放在 2 列的表单中:

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.util.ArrayList;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Lab7_3 {

    public static void main(String[] args) {
        buildFrame("Groups");

    }

    public static void buildFrame(String name){
        JFrame fr = new JFrame(name);

        //Создание переключателя окна
            JButton JBMore=new JButton("<html>><br/>><br/>></html>");
        //Создание переключателя окна

        //Создание последней - информационной панели
            JPanel jp2 = new JPanel(new GridBagLayout());
            GridBagConstraints c = new GridBagConstraints();

            JLabel jl = new JLabel("Select the person");

                ArrayList<JLabel> arrLabel = new ArrayList<JLabel>();
                ArrayList<JTextField> arrText = new ArrayList<JTextField>();
                for (int i=0;i<4;i++){
                    arrLabel.add(new JLabel(""));
                    arrText.add(new JTextField(""));
                    //jp2_2.add(arrLabel.get(i));
                    //jp2_2.add(arrText.get(i));
                }
                arrLabel.get(0).setText("Age:");
                arrLabel.get(1).setText("Address:");
                arrLabel.get(2).setText("Telephone:");
                arrLabel.get(3).setText("Favorite color:");

            c.insets = new Insets(0,0,0,0);
            c.gridheight = GridBagConstraints.REMAINDER;
            c.gridwidth = GridBagConstraints.RELATIVE;
            c.anchor = GridBagConstraints.WEST;
            c.fill = GridBagConstraints.VERTICAL;
            c.weighty = 1.0;
            c.weightx = 0.1;
            c.gridx = 0;
            c.gridy = 0;
            c.ipadx = 0;
            jp2.add(JBMore,c);  

            c = new GridBagConstraints();
            c.insets = new Insets(10, 10, 20, 10);
            c.anchor = GridBagConstraints.CENTER;
            c.gridheight = 1;
            c.gridwidth = GridBagConstraints.REMAINDER;
            c.weightx = 1;
            c.weighty = 0.01;
            c.gridx = 1;
            c.gridy = 0;
            jp2.add(jl,c);

            c = new GridBagConstraints();
            c.insets = new Insets(2,10,10,10);
            c.gridwidth = 1;
            c.gridheight = 1;
            for (int i=0;i<4;i++){
                c.anchor = GridBagConstraints.WEST;
                c.fill = GridBagConstraints.NONE;
                c.gridx = 1;
                c.weightx = 0.05;
                c.gridy = 1+i;
                c.weighty = 0.05;
                c.ipadx = 0;
                jp2.add(arrLabel.get(i),c);

                c.anchor = GridBagConstraints.EAST;
                c.fill = GridBagConstraints.VERTICAL;
                c.gridx = 2;
                c.weightx = 0.05;
                c.ipadx = 10;
                //jp2.add(arrText.get(i),c);
            }


        //Создание последней - информационной панели

        fr.add(jp2);

        fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        fr.setVisible(true);
        fr.pack();
        fr.setMinimumSize(fr.getSize());        
    }

}

尝试取消注释这一行[87]:

//jp2.add (arrText.get (i), c);

你会看到所有的元素都向左移动了


注释第 87 行:

Commented line[87]

未注释的第 87 行:

Uncommented line[87]

最佳答案

左边列宽度的GridBagConstraints.RELATIVE表示只在右边留一列空间。您可能希望将该按钮的宽度更改为 1 .

旁注:

不应该是这样吗

<html>&gt;<br/>&gt;<br/>&gt;</html>

关于java - 为什么 GridBagLayout 不创建第三列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19326190/

相关文章:

java - GridBagLayout 未正确定位垂直 JSeparator

java - 在 JUnit 测试的上下文中使用 OSGi 声明式服务

java - 如何在不使用eclipse的情况下运行war文件

java - Spring Data JPQL 无法提取结果集

java - 动态添加的JTable不显示

Java Swing : JOptionPane appears by itself without parent window when restored?

java - 是否没有办法迭代或复制 Java ThreadLocal 的所有值?

java - 如何更改 jFreeChart 栏中特定栏的颜色

java - 向 JPanel 添加边框会影响添加到面板的组件的布局

java - 比较两个 JComboBox 的值