当Frame最大化时,如何让JTextField
具有固定的高度?我希望它看起来与Ubuntu上的Skype应用程序类似。
private JTextField username;
private JPasswordField password;
private JLabel usernamelabel;
private JLabel passwordlabel;
public LoginPanel(){
setSize(200,200);
setLayout(new GridLayout(4,4));
setBackground(new Color(85,153,187));
setBorder(BorderFactory.createEmptyBorder(70, 70, 70, 70));
username = new JTextField();
password = new JPasswordField();
usernamelabel= new JLabel("Username");
passwordlabel= new JLabel("Password");
username.setBounds(5, 5, 100, 100);
username.setPreferredSize(new Dimension(80,20));
password.setPreferredSize(new Dimension(80,20));
add(usernamelabel);
add(username);
add(passwordlabel);
add(password);
答案 0 :(得分:6)
请勿使用GridLayout
以外的布局,或将文字字段放在另一个FlowLayout
内GridLayout
的面板中。
答案 1 :(得分:3)
我认为这可以解决您的问题。
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
JFrame failFrame = new JFrame();
JPanel mainPanel = new JPanel();
mainPanel.setLayout(new GridLayout(0, 4));
JPanel leftTextFieldPanel = new JPanel();
leftTextFieldPanel.setLayout(new FlowLayout());
JPanel rightTextFieldPanel = new JPanel();
rightTextFieldPanel.setLayout(new FlowLayout());
JTextField leftTextField = new JTextField();
leftTextField.setPreferredSize(new Dimension(150,20));
JTextField rightTextField = new JTextField();
rightTextField.setPreferredSize(new Dimension(150,20));
leftTextFieldPanel.add(leftTextField);
mainPanel.add(leftTextFieldPanel);
rightTextFieldPanel.add(rightTextField);
mainPanel.add(rightTextFieldPanel);
mainPanel.add(new JPanel());
mainPanel.add(rightTextFieldPanel);
mainPanel.add(new JPanel());
failFrame.add(mainPanel);
failFrame.setSize(600, 400);
failFrame.setLocationRelativeTo(null);
failFrame.setVisible(true);
}
}
我使用了嵌套的布局。在Top上是您的GridLayout,文本字段位于GridLayout面板中添加的FlowLayout中。因此,文本字段不再被拉伸。
答案 2 :(得分:2)
您可以参考here。
可以在setMaximumSize中找到JComponent方法,JTextField可以从JComponent中使用此方法。
编辑:但是,硬编码JTextField的大小似乎不是一个好习惯,特别是当您在多个平台上运行它时,因为您可能会遇到字体大小问题。
答案 3 :(得分:0)
感谢所有帮助人员,希望这有助于将来的其他人。我得到了我正在寻找的视觉效果。
private JTextField username;
private JPasswordField password;
private JPanel [] login = {new JPanel(), new JPanel()};
private JLabel usernamelabel;
private JLabel passwordlabel;
public LoginPanel(){
setSize(200,200);
setBackground(new Color(85,153,187));
setBorder(BorderFactory.createEmptyBorder(70, 70, 70, 70));
username = new JTextField();
password = new JPasswordField();
usernamelabel= new JLabel("Username");
passwordlabel= new JLabel("Password");
login[0].add(usernamelabel);
login[0].add(username);
login[1].add(passwordlabel);
login[1].add(password);
for(JPanel p : login){
p.setBackground(new Color(85,153,187));
this.add(p);
}
username.setBounds(5, 5, 100, 100);
username.setPreferredSize(new Dimension(120,20));
password.setPreferredSize(new Dimension(120,20));
}
答案 4 :(得分:-1)
在紧要关头,做
tf.setMaximumSize(tf.getMinimumSize())
将保持其恒定的大小和平台中立。