Java GridBagLayout

3
我被委托使用Swing在Java中设计基本用户界面(UI),但我遇到了布局问题。我想创建类似这个的东西,但是我尝试使用GridBagLayout却导致结果非常混乱。有人能提供一些建议来帮助我像这样布置GUI吗?
我有一个JTabbedPane,在其中添加两个选项卡,每个选项卡都包含一个包含我的控件的JPanel。 我想要的布局

http://madbean.com/anim/totallygridbag/ - irreputable
4个回答

4

我建议:

  • 整个GUI使用BorderLayout布局。
  • JTable应该放在一个JScrollPane中,并将其放置在BorderLayout.CENTER的位置。
  • 顶部JPanel中的标签、字段和按钮应该放置在BorderLayout.PAGE_START的位置。
  • 顶部JPanel也可以使用BorderLayout布局,并将按钮放置在BorderLayout.PAGE_END的位置。
  • 按钮应该由一个GridLayout(1, 0, x, 0)的JPanel容纳,其中x是按钮之间的间距。
  • 标签和JTextFields应该放在一个使用GridBagLayout布局的JPanel中,并将其放置在顶部JPanel的BorderLayout.CENTER的位置。
  • 不要盲目遵循这些建议,而是要用不同组合的嵌套JPanels进行实验和尝试。
  • 您还可以查看此链接

3
以下是我的建议:
  • 使用GridLayout(3, 2)的JPanel pTextBox来容纳所有标签和文本框
  • 使用GridLayout(1, 3)或BoxLayout(horizontal)的JPanel pButtons来容纳所有按钮
  • 使用BoxLayout(vertical)的JPanel pAll来容纳pTextBoxpButtons和表格
  • 使用struts、glues和最小/最大/首选大小来调整间距/调整大小行为
此外,还可以查看:http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html,以了解与您需要的完全相同的内容。

2
有一个组件,JTable,希望占据窗口中所有可用的空间。这意味着需要使用BorderLayout,其中包含一个JScrollPane,该JScrollPane在BorderLayout.CENTER中包含JTable。其他组件将位于另一个JPanel中,在BorderLayout.PAGE_START中。
在这个新的JPanel中,没有需要垂直调整大小的组件,因此我不认为需要BorderLayout。我会用一个垂直的BoxLayout来组合它。在这个面板中插入另外两个,一个GridBagLayout用于标签和文本字段,下面是一个FlowLayout用于按钮,居中对齐,并且有一些水平间隙。我更喜欢使用FlowLayout而不是GridLayout来放置按钮,因为如果您调整主面板的大小,使用FlowLayout,按钮之间的距离将保持不变。

0

这里是一些代码...我无法正确显示JTextFields,所以你需要修复它。

主要:

    import javax.swing.SwingUtilities;

public class Main {

    public static void main(String [] args) {

        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {

                Panel panel = new Panel();
            }

        });

    }

}

面板:

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;

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

public class Panel extends JPanel{

    private JFrame frame; 

    private JLabel label1;
    private JLabel label2; 
    private JLabel label3;

    private JTextField textField1;
    private JTextField textField2;
    private JTextField textField3;

    private JButton button1;
    private JButton button2;
    private JButton button3;

    private JTable table;


    public Panel() {

        label1 = new JLabel("label1");
        label2 = new JLabel("label2");
        label3 = new JLabel("label3");

        textField1 = new JTextField("textField1", 20);
        textField2 = new JTextField("textField2", 20);
        textField3 = new JTextField("textField3", 100);

        button1 = new JButton("Hello");
        button2 = new JButton("Goodbye");
        button3 = new JButton("Love");

        table = new JTable(20,20);

        frame = new JFrame("My application");
        frame.setSize(1000, 1000);
        frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
        frame.setVisible(true);
        this.setOpaque(true);

        setLayout(new GridBagLayout());

        GridBagConstraints gc = new GridBagConstraints();

        gc.weightx = 1;
        gc.weighty =1;
        gc.fill = GridBagConstraints.NONE;

        gc.gridx = 0;
        gc.gridy = 0;
    //  gc.anchor = GridBagConstraints.WEST;
        add(label1, gc);

        gc.gridx = 2;
        gc.gridy = 0;
        //gc.anchor = GridBagConstraints.EAST;
        add(textField1, gc);

        gc.gridx = 0;
        gc.gridy = 1;

        //gc.anchor = GridBagConstraints.WEST;
        add(label2, gc);

        gc.gridx = 2;
        gc.gridy = 1;
        //gc.anchor = GridBagConstraints.EAST;
        add(textField2, gc);

        gc.gridx = 0;
        gc.gridy = 2;
        //gc.anchor = GridBagConstraints.WEST;
        add(label3, gc);

        gc.gridx = 2;
        gc.gridy = 2;
        //gc.anchor = GridBagConstraints.EAST;
        add(textField3, gc);

        gc.gridx = 0;
        gc.gridy = 3;
        //gc.anchor = GridBagConstraints.WEST;
        add(button1, gc);

        gc.gridx = 1;
        gc.gridy = 3;
        gc.anchor = GridBagConstraints.CENTER;
        add(button2, gc);

        gc.gridx = 2;
        gc.gridy = 3;
    //  gc.anchor = GridBagConstraints.EAST;
        add(button3, gc);

        gc.gridx = 1;
        gc.gridy = 4;
        gc.anchor = GridBagConstraints.CENTER;
        add(table, gc);

        frame.add(this);
    }

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接