3

我的任务是使用 Swing 在 Java 中设计一个基本的 UI,但我一直坚持布置它。我想创建类似的东西,我尝试使用 GridBagLayout 导致了一些非常混乱的事情。任何人都可以提供一些关于如何像这样布置我的 GUI 的提示吗?

我有一个 JTabbedPane,我向其中添加了两个选项卡,并且我向这两个选项卡中的每一个添加了一个包含我的控件的 JPanel。 我想如何布局

4

4 回答 4

4

我建议

  • 整体 GUI 使用 BorderLayout,
  • JTable 位于 JScrollPane 中,这应该放置在 BorderLayout.CENTER 中。
  • 包含标签、字段和按钮的顶部 JPanel 放置在 BorderLayout.PAGE_START。
  • 顶部JPanel 也可以使用BorderLayout 并且可以将按钮保持在BorderLayout.PAGE_END 位置。
  • 按钮将由使用 JPanel 的 GridLayout(1, 0, x, 0) 持有,其中 x 是按钮之间的间隙
  • 标签和 JTextField 位于使用 GridBagLayout 的 JPanel 中,并且放置在 BorderLayout.CENTER 位置的顶部 JPanel 中。
  • 您不要盲目地遵循这些建议,而是尝试并使用嵌套 JPanel 的不同组合,每个组合都使用自己的布局。
  • 你也看看这个链接
于 2012-10-19T20:35:32.463 回答
3

以下是我的建议:

  • 使用 a JPanel pTextBoxwith GridLayout(3, 2) 来保存所有标签 + 文本框
  • 使用JPanel pButtons带有 GridLayout(1, 3) 或 BoxLayout(horizo​​ntal) 的所有按钮
  • 使用JPanel pAll带有 BoxLayout(vertical) 的 a 来保存pTextBox,pButtons和 Table。
  • 使用支柱、胶水和最小/最大/首选尺寸来调整间距/调整大小行为。

另请查看:http ://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html以准确比较您正在寻找的内容。

于 2012-10-19T20:40:51.660 回答
2

有一个组件 JTable 想要占据窗口中的所有可用空间。这意味着将需要一个 BorderLayout,其 JScrollPane 包含该 BorderLayout 的 BorderLayout.CENTER 中的 JTable。其他组件将在 BorderLayout.PAGE_START 中的另一个 JPanel 内

在这个新的 JPanel 中,没有需要垂直调整其大小的组件,所以我看不到 BorderLayout 的必要性。我会用一个垂直的 BoxLayout 来组合它。在此面板中再插入两个,一个 GridBagLayout 用于标签和文本字段,一个 FlowLayout 用于按钮,中心对齐和一些水平间隙。我更喜欢 GridLayout 的 FlowLayout insetad 按钮,因为如果您调整主面板的大小,使用 FlowLayout 按钮将保持它们之间的相同距离。

于 2012-10-19T21:40:37.577 回答
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);
    }

}
于 2017-05-18T20:06:32.723 回答