2

我想缩短我的文本字段,这样它就不会延伸到我的 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);
        }
4

5 回答 5

5

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

c.fill = GridBagConstraints.HORIZONTAL;

经过

c.fill = GridBagConstraints.NONE;
于 2013-07-10T21:02:32.820 回答
3

首先,摆脱这个:

frame.setSize(500, 500);

相反,让您的组件和布局管理器通过在填充 JFrame 之后并将其设置为可见之前调用它来调整自己的大小。pack()

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

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

c.insets = new  Insets(40, 15, 15, 40);
panel.add(txtField1, c);
于 2013-07-10T20:58:52.863 回答
2

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

//this would make the next component take up 2 columns
c.gridwidth = 2;
于 2013-07-10T21:01:44.600 回答
1

You could have a jpanel and set its dimensions and layout, then add the elements to that panel and add the panel to your jframe.

于 2013-07-10T21:05:04.723 回答
0

根据您需要完成的工作,可以使用不同的布局类型。我通常喜欢用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

于 2013-07-10T21:14:08.723 回答