0

是的,我是Java的初学者......有人可以告诉我,为什么JTextField它位于整体JFrame而不是像我输入的那样只是(300,50)到(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);
    }

}
4

2 回答 2

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
}

应该考虑阅读这篇使用布局管理器

于 2013-07-04T21:10:43.847 回答
1

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

于 2013-07-04T21:32:31.250 回答