JTextField在整个JFrame中而不是我确定的Area

时间:2013-07-04 21:03:50

标签: java swing jframe jtextfield

是的我是Java的初学者...有人可以告诉我,为什么JTextField位于整个JFrame而不是(300,50)到(300)之间的空间450,75)就像我输入了setBounds

import java.awt.*;
import javax.swing.*;

public class Chat extends JFrame {

    JTextField t=new JTextField("");

    public Chat() {
        setVisible(true);
        setSize(900, 300);
        t = new JTextField();
        t.setBounds(300, 50, 150, 25);
        add(t);
    }

}

2 个答案:

答案 0 :(得分:1)

导致JFrame默认布局为BorderLayout,如果未指定,则添加组件时将放在中心。我建议使用其他布局 GridBagLayout

示例:

public Chat() {
      setSize(900, 300);
      t = new JTextField();
      t.setPreferredSize(new Dimension(x,y));
      GridBagConstraints gridBagConstraints = new GridBagConstraints();
      gridBagConstraints.gridx = 6;
      gridBagConstraints.gridy = 7;
      JPanel panel = new JPanel();
      panel.setLayout(new GridBagLayout());
      panel.add(t,gridBagConstraints);
      add(panel);
      pack(); // this sizes the frame
      setVisible(true); // call set visible after adding components
}

应该考虑阅读此Using Layout Managers

答案 1 :(得分:1)

setBounds方法仅适用于null布局,默认JFrame的布局是BorderLayout。使用BorderLayout调用JFrame的add方法,而不指定BorderLayout.CENTER的位置默认值,并使用其最大大小属性作为边界来使组件居中。这意味着设置组件的首选大小将不适用于BorderLayout.CENTER。您可以使用setLayout(null)将框架的布局更改为null,这被认为是一种不好的做法,因为它限制了代码的可移植性,或者使用其他布局管理器。