【问题标题】:GridBagLayout align textField?GridBagLayout 对齐文本字段?
【发布时间】:2013-07-08 23:29:21
【问题描述】:

我想缩短我的文本字段,这样它就不会延伸到我的 jframe 的末尾,所以它现在看起来是这样的:

如何控制文本字段的宽度,使其不会像我尝试过 setPreferedSize() 和 setSize() 一样,但它们不起作用??

@Override
        public void run() {

            JFrame frame = new JFrame("Test Calculator");
            frame.setVisible(true);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setLocationRelativeTo(null);
            frame.setSize(500, 500);

            JPanel panel = new JPanel(new GridBagLayout());
            frame.getContentPane().add(panel, BorderLayout.NORTH);
            GridBagConstraints c = new GridBagConstraints();

            JLabel testLabel = new JLabel("Enter Score For Test 1: ");  
            c.gridx = 0;
            c.gridy = 0;
            c.anchor = GridBagConstraints.WEST;
            c.fill = GridBagConstraints.BOTH;
            c.insets = new  Insets(40, 15, 15, 0);
            panel.add(testLabel , c);


            JTextField txtField1 = new JTextField("TextField");
            c.gridx = 1;
            c.gridy = 0;
            c.fill = GridBagConstraints.HORIZONTAL;
            c.weightx = .5; 
            panel.add(txtField1 , c);
        }

【问题讨论】:

    标签: java swing awt layout-manager gridbaglayout


    【解决方案1】:

    您告诉布局文本字段必须水平填充,这就是它的作用。替换

    c.fill = GridBagConstraints.HORIZONTAL;
    

    c.fill = GridBagConstraints.NONE;
    

    【讨论】:

      【解决方案2】:

      首先,摆脱这个:

      frame.setSize(500, 500);
      

      而是让您的组件和布局管理器调整自己的大小,方法是在填充 JFrame 之后并将其设置为可见之前在 JFrame 上调用 pack()

      接下来,考虑在主容器周围添加一个空边框,或者使用容器向 GridBagLayout 添加一个空 JLabel。

      您还可以为您的 JTextField 提供适当的插图以在其周围提供缓冲。

      c.insets = new  Insets(40, 15, 15, 40);
      panel.add(txtField1, c);
      

      【讨论】:

      • "接下来,考虑在主容器周围添加一个空边框,或者使用容器向 GridBagLayout 添加一个空 JLabel" 我不明白我为什么需要这样做?请解释一下
      • @babaysteps:这完全取决于您要做什么。如果您希望添加到面板的所有组件周围有一个空边框,那么给它一个类似于 insets 的 EmptyBorder。如果你想在右边有一个空列,那么在 c.gridY = 2 位置添加一个空白 JLabel 。如果您只是想稍微移动一下 JTextField 的右端,请按照我在上面显示的方式更改插图。我建议你尝试你的代码并尝试这些东西,你也可以阅读教程。
      【解决方案3】:

      您可以通过更改 GridBagConstraints 的 gridwidth 字段来更改特定组件占用的列数。

      //this would make the next component take up 2 columns
      c.gridwidth = 2;
      

      【讨论】:

        【解决方案4】:

        您可以拥有一个 jpanel 并设置其尺寸和布局,然后将元素添加到该面板并将该面板添加到您的 jframe。

        【讨论】:

          【解决方案5】:

          根据您的需要,可以使用不同的布局类型。我通常喜欢用Box的。他们有方法可以让你创建水平/垂直支柱,创建刚性区域(这是我通常使用的)

              Box box1 = Box.createHorizontalBox();
              Box box2 = Box.createVerticalBox();
          
              box1.add(Box.createRigidArea(new Dimension(30,0)));
              box1.add(testLabel);
              box1.add(Box.createRigidArea(new Dimension(30,0)));
              box1.add(txtField1);
              box1.add(Box.createRigidArea(new Dimension(30,0)));
          
              box2.add(Box.createRigidArea(new Dimension(0,30)));
              box2.add(box1);
              box2.add(Box.createRigidArea(new Dimension(0,30)));
          
              JFrame.add(box2);
          

          查看此链接以了解说明以及如何使用所有不同类型的布局:http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html

          【讨论】:

            猜你喜欢
            • 2014-09-11
            • 2020-07-19
            • 2015-04-05
            • 1970-01-01
            • 1970-01-01
            • 2014-06-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多