xjlnjut730 2009-05-24 10:42
浏览 591
已采纳

关于Swing中Box跟JPanel以及setSize的疑问

最近我在学习中发现了一些问题,就是下面的程序,有两个问题:

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");
        }
    }

}
 

 

  • 写回答

1条回答 默认 最新

  • SalinEgria1 2009-05-26 16:23
    关注

    调用组件的setSize()方法之后,如果没效果,尝试调用JPanel的repaint()
    Swing的架构就是这样的,组件必须添加到JComponent上才可以,JPanel是继承JComponent的JFrame不是

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥20 测距传感器数据手册i2c