最近我在学习中发现了一些问题,就是下面的程序,有两个问题:
1.JTextField与JPasswordField的setSize方法是用来设置大小的么?为什么我在使用的时候却没有任何效果呢?
2.为什么要把Box加入JPanel,然后再加入JFrame,才能得到我要的效果呢?而当我直接把Box加入JFrame时,界面却变得很奇怪,特别是JTextField跟JPasswordField会膨胀开来?
程序如下:
package test.swing;
import java.awt.event.*;
import javax.swing.*;
public class LoginTest extends JFrame implements ActionListener {
private JPanel jp=new JPanel();
private JPanel jp1=new JPanel();
private JPanel jp2=new JPanel();
private JPanel jp3=new JPanel();
JLabel name=new JLabel("请输入用户名");
JLabel password=new JLabel("请输入密码");
JLabel show=new JLabel();
JButton login=new JButton("登陆");
JButton reset=new JButton("重置");
JTextField jtf_name=new JTextField("",10);
JPasswordField jpf_password=new JPasswordField("",10);
private Box horibox1=Box.createHorizontalBox();
private Box horibox2=Box.createHorizontalBox();
private Box horibox3=Box.createHorizontalBox();
private Box verbox=Box.createVerticalBox();
public LoginTest(){
name.setSize(10, 10);
password.setSize(10, 10);
//jt_name.setSize(200, 1000); //setSize为什么不起作用呢?
//jpf_password.setSize(200,1000); //setSize为什么不起作用呢?
jpf_password.setEchoChar('*');
horibox1.add(name);
horibox1.add(Box.createHorizontalStrut(20));
horibox1.add(jtf_name);
horibox2.add(password);
horibox2.add(Box.createHorizontalStrut(20));
horibox2.add(jpf_password);
horibox3.add(login);
horibox3.add(Box.createHorizontalStrut(40));
horibox3.add(reset);
jp1.add(horibox1);
jp2.add(horibox2);
jp3.add(horibox3);
verbox.add(jp1);
verbox.add(jp2);
verbox.add(jp3);
// verbox.add(horibox1); //把上面六行换成这三行,为什么效果会变得很奇怪呢?
// verbox.add(horibox2); //JPanel跟Box之间有什么样的区别?
// verbox.add(horibox3);
verbox.add(show);
login.addActionListener(this);
reset.addActionListener(this);
this.add(verbox);
this.setTitle("登陆窗口");
this.setVisible(true);
this.setBounds(200, 200, 300, 300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String []args){
new LoginTest();
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==login){
jtf_name.setText("login");
jpf_password.setText("login");
}else if(e.getSource()==reset){
jtf_name.setText("reset");
jpf_password.setText("reset");
}
}
}