我正在寻找一种方法来设置JTextField
的显示,以占据包含它的JPanel
的整个宽度。
我能够找到的唯一方法是setColumns()
方法与getWidth()
之后JPanel
之后调用的pack()
方法相结合setVisible()
调用{1}}个方法。但是当我这样做时,JTextField
最终会比包围它的JPanel
大得多。我对这种情况发生的假设是getWidth()
返回JPanel
的大小(以像素为单位),而JTextField
中的列都大于像素。
我甚至没有寻找动态调整大小的字段,只是为了与程序开头的JPanel
一样宽
任何帮助非常感谢
答案 0 :(得分:4)
使用合适的布局管理器......
请记住,组件的责任不是决定它应该有多大,这是布局管理器的责任,组件只能提供有关它有多大的提示......
例如,您可以使用GridBagLayout
...
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
public TestPane() {
JTextField field = new JTextField(10);
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.weightx = 1;
gbc.fill = GridBagConstraints.HORIZONTAL;
add(field, gbc);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(200, 200);
}
}
}