我有一个GUI,它基于Swing的JPanel,它使用BorderLayout。在北面板我添加了一个新的JPanel,它使用FlowLayout并包含两个textField和其他组件。 当我更改textField的文本并隐藏此面板中的某些组件时,此textField会继续调整大小。我怎么能避免这个?无论发生什么,我都希望textField保持相同的大小。我已经尝试过setSize,setPreferredSize,setMinimumSize但没有成功。
txtSource = new WebTextField(source);
txtSource.setMaximumSize(new Dimension(30,20));
txtSource.setMinimumSize(new Dimension(20, 20));
txtSource.setEditable(false);
txtDestination = new WebTextField(destination);
txtDestination.setMaximumSize(new Dimension(30,20));
txtDestination.setMinimumSize(new Dimension(20, 20));
之前:
后:
答案 0 :(得分:7)
当我更改textField的文本并隐藏此面板中的某些组件时,此textField会继续调整大小。
此示例显示常量大小的文本字段。你可以添加SSCCE代码吗?
import java.awt.*;
import javax.swing.*;
class TextFieldSize {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JTextField smallField = new JTextField(5);
JTextField largeField = new JTextField(20);
JPanel gui = new JPanel(new FlowLayout());
gui.add( smallField );
gui.add( largeField );
JFrame f = new JFrame("Text Field Size");
f.add(gui);
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.pack();
f.setLocationByPlatform(true);
f.setVisible(true);
}
});
}
}
答案 1 :(得分:0)
你不能像你想要的那样做,有些LayoutManagers
忽略setXxxSize
,但你可以使用f.e.接受BoxLayout
setXxxSize
答案 2 :(得分:0)
//This works best for me:
import java.awt.Dimension;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class NoResizeJTextField {
public static void main(String[] args) {
final JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setPreferredSize(new Dimension(500,300));
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
panel.add(new JLabel("Text: "));
JTextField tf = new JTextField(30);
tf.setMaximumSize(tf.getPreferredSize());
tf.setMinimumSize(tf.getPreferredSize());
panel.add(tf);
frame.add(panel);
SwingUtilities.invokeLater(new Runnable() {
public void run() {
frame.pack();
frame.setVisible(true);
}
});
}
}