【问题标题】:Java GridBagLayoutJava GridBagLayout
【发布时间】:2012-10-10 12:37:39
【问题描述】:

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

我有一个 JTabbedPane,我向其中添加了两个选项卡,并为这两个选项卡中的每一个添加了一个包含我的控件的 JPanel。

【问题讨论】:

标签: java swing jpanel gridbaglayout


【解决方案1】:

我会推荐

  • 整体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 的不同组合,每个组合都使用自己的布局。
  • 您还可以查看this link

【讨论】:

    【解决方案2】:

    以下是我的建议:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        这里有一些代码...我无法让 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);
            }
        
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-03-28
          • 2011-06-17
          • 2017-11-28
          • 1970-01-01
          • 2015-12-02
          • 1970-01-01
          • 1970-01-01
          • 2014-11-23
          相关资源
          最近更新 更多