如何使用swing组件的选项卡功能

1.引子

在使用swing组件时,我们想要在同一个窗口切换不同的界面,这时可能就要用到选项卡JTabbedPane对象。

2.详解

有在同窗口进行子页面的切换这样的需求时,我们第一选择就是使用JTabbedPane,不要问为什么,因为其他方式都有很多坑,大家别再尝试了。

1)走过的弯路

下面是我遇到的大坑,在网上找的视图切换代码(这整整坑了我两天时间哟)。

    // 切换为公寓信息界面
        else if (e.getSource() == departmentItem)
        {
            //infoContainer为一个JPanel面板容器对象
            infoContainer.removeAll();  //移除当前容器内所有的子组件
            departView = new AdminDepartmentInfoView();
            infoContainer.add(departView);  //将新的组件加入到当前容器中
            infoContainer.validate(); // 验证容器及其子组件,重新设置布局方式(反正就是验证新的东西是否可靠能用)
            repaint();      // 重画当前容器(相当于更新当前UI界面)
        }
  • (1).在WindowBuilder中可以看出只departView中只有一个文本TextField对象,恶搞是FlowLayout流式布局,它是能在父容器中显示的。但是只要departView中包含有多个复杂的组件如多有JTable和JscrollPanel等子组件,或是使用除了FlowLayout流式布局和GroupLayout外的其他布局方法,其均不能在父容器中正常显示。
    在这里插入图片描述
    在这里插入图片描述
  • (2).使用BorderLayout布局不能在父容器中显示。
    在这里插入图片描述
    在这里插入图片描述

2)快速使用JTabbedPane

可视化工具WindowBuilder减小了我们做swing界面的难度,但这里却无法用它来做切换界面,我们最多用它来拖出一个JTabbedPane这个父容器,而其内部的每个选项卡组件(每个选项卡都是一个容器)只有通过代码来实现。因为这个些选项卡不能是原生的容器,它们应该是我们在继承JDK中原生容器的基础之上,在其内部添加有大量子组件的自定义容器。

      StuInitView stuInitView=new StuInitView();
        //给菜单项添加监听器
        changeLoginItem=stuInitView.getChangeLoginItem();
        exitSysItem=stuInitView.getExitSysItem();
        changeLoginItem.addActionListener(this);
        exitSysItem.addActionListener(this);
        
        /**
         各选项卡项添加
        */
        // 添加主页界面
        tab.addTab("主页", null,stuInitView, null);
        
        // 添加学生信息面板
        tab.addTab("修改&查看本人信息", null, new StuSelfInfoView(stuNo), null);
        
        // 添加水电信息面板
        tab.addTab("水电缴费", null, new StuPowerView(stuNo), null);
  • 选项卡之一(继承JPanel的自定义容器)
    在这里插入图片描述
  • 选项卡整体效果
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值