最近我在学习中发现了一些问题,就是下面的程序,有两个问题:
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"); } } }