是的我是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);
}
}
答案 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,这被认为是一种不好的做法,因为它限制了代码的可移植性,或者使用其他布局管理器。