我想缩短我的文本字段,因此它不会延伸到我的jframe的末尾,所以这就是它现在的样子:
如何控制文本字段的宽度,以便它不会像我尝试setPreferedSize()和setSize()那样streatch但它们不起作用?
@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);
}
答案 0 :(得分:5)
您告诉布局文本字段必须水平填充,这就是它的作用。取代
c.fill = GridBagConstraints.HORIZONTAL;
通过
c.fill = GridBagConstraints.NONE;
答案 1 :(得分:3)
首先,摆脱这个:
frame.setSize(500, 500);
相反,在填充JFrame之后,在设置JFrame之前,让您的组件和布局经理自行调整大小
。接下来,考虑在主容器周围添加空边框,或者使用容器向GridBagLayout添加空JLabel。
您还可以为JTextField提供适当的插图,以便为其提供缓冲。
pack()
答案 2 :(得分:2)
您可以通过更改GridBagConstraints gridwidth字段来更改特定组件占用的列数。
//this would make the next component take up 2 columns
c.gridwidth = 2;
答案 3 :(得分:1)
你可以有一个jpanel并设置它的尺寸和布局,然后将元素添加到该面板并将面板添加到你的jframe。
答案 4 :(得分:0)
根据您需要完成的操作,可以使用不同的布局类型。我通常喜欢使用Box's。他们有一些方法可以让你创建水平/垂直支柱,创建刚性区域(这是我通常使用的)
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