JSplitPane与JTabledPane

news2024/11/25 16:37:29

Swing提供了一些具有特殊功能的容器 , 这些特殊容器可以用于创建一些更复杂的用户界面。

使用JSplitPane

JSplitPane 用于创建一个分割面板,它可以将 一个组件(通常是一个容器)分割成两个部分,并提供一个分割条 , 用户可以拖动该分割条来调整两个部分的大小。

JSplitPane使用步骤:

  1. 创建JSplitPane对象
通过如下构造方法可以创建JSplitPane对象
JSplitPane(int newOrientation, Component newLeftComponent,Component newRightComponent)
newOrientation:指定JSplitPane容器的分割方向:
如果值为JSplitPane.VERTICAL_SPLIT,为纵向分割;
如果值为JSplitPane.HORIZONTAL_SPLIT,为横向分割;

newLeftComponent:左侧或者上侧的组件;
newRightComponent:右侧或者下侧的组件;
  1. 设置是否开启连续布局的支持(可选)
setContinuousLayout(boolean newContinuousLayout):
默认是关闭的,如果设置为true,则打开连续布局的支持,但由于连续布局支持需要不断的重绘组件,所以效率会低一些
  1. 设置是否支持"一触即展"的支持(可选)
setOneTouchExpandable(boolean newValue):
默认是关闭的,如果设置为true,则打开"一触即展"的支持
  1. 其他设置
setDividerLocation(double proportionalLocation):设置分隔条的位置为JSplitPane的某个百分比
setDividerLocation(int location):通过像素值设置分隔条的位置
setDividerSize(int newSize):通过像素值设置分隔条的大小
setLeftComponent(Component comp)/setTopComponent(Component comp)/setRightComponent(Component comp)/setBottomComponent(Component comp):设置指定位置的组件

案例:

使用JSplitPane实现下图效果:

点击右侧的图书名称,在左上方显示该图书的图片,左下方显示该图书的描述

package swing.day02.book;

import javax.swing.*;

public class Book {

    private String name;

    private Icon icon;

    private String desc;

    public Book(String name, Icon icon,String desc) {
        this.name = name;
        this.icon = icon;
        this.desc = desc;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Icon getIcon() {
        return icon;
    }

    public void setIcon(Icon icon) {
        this.icon = icon;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

    @Override
    public String toString() {
        return name;
    }
}
package swing.day02.book;

import awt.day01.Utils;

import javax.swing.*;
import java.awt.*;
import java.util.Objects;


public class SplitPaneTest {

    Book[] books = {new Book("java自学宝典", new ImageIcon("src/swing/img/container/java.png"), "国内关于 Java 编程最全面的图书 \n 看得懂 , 学得会"),
            new Book("轻量级的JAVAEE企业应用实战", new ImageIcon("src/swing/img/container/ee.png"), "SSM整合开发的经典图书,值的拥有"),
            new Book("Android基础教程", new ImageIcon("src/swing/img/container/android.png"), "全面介绍Android平台应用程序\n 开发的各方面知识")
    };

    JFrame frame = new JFrame("JSplitPane");
    JSplitPane yS;
    JSplitPane xS;

    //列表展示图书
    JList<Book> bookList = new JList<>(books);
    JLabel bookCover = new JLabel();
    JTextArea bookDesc = new JTextArea();
    public void init(){
        //为三个组件设置最佳大小
        bookList.setPreferredSize(new Dimension(150,400));
        bookCover.setPreferredSize(new Dimension(220,330));
        bookDesc.setPreferredSize(new Dimension(220,70));

        yS = new JSplitPane(JSplitPane.VERTICAL_SPLIT, bookCover, bookDesc);
        xS = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, yS, bookList);
        frame.add(xS);
        yS.setOneTouchExpandable(true);
        xS.setOneTouchExpandable(true);
        //设置分隔条的大小
        yS.setDividerSize(20);
        //设置分割面板根据组件的大小调整最佳布局
        yS.resetToPreferredSizes();
        //设置支持连续布局
        xS.setContinuousLayout(true);
        bookList.addListSelectionListener(e -> {
            Book selectedValue = bookList.getSelectedValue();
            if (Objects.nonNull(selectedValue)) {
                bookCover.setIcon(selectedValue.getIcon());
                bookDesc.setText(selectedValue.getDesc());
            }
        });

        Utils.setJFrame(frame);

    }

    public static void main(String[] args) {
        new SplitPaneTest().init();
    }

}

使用JTabledPane

JTabbedPane可以很方便地在窗口上放置多个标签页,每个标签页相当于获得了一个与外部容器具有相同大小的组件摆放区域。通过这种方式, 就可以在一个容器里放置更多的组件 , 例如右击桌面上的" 我的电脑 "图标,在弹出的快捷菜单里单击"属性 " 菜单工页 , 就可以看 到 一个"系统属性 " 对话框 ,这个对话框里包含了 若干个标签页。

如果需要使用JTabbedPane在窗口上创建标签页 ,则可以按如下步骤进行:

  1. 创建JTabbedPane对象
JTabbedPane(int tabPlacement, int tabLayoutPolicy):
tabPlacement:
指定标签标题的放置位置,可以选择 SwingConstants中的四个常量:TOP、LEFT、BOTTOM、RIGHT
tabLaoutPolicy:
指定当窗口不能容纳标签页标题时的布局策略,可以选择JTabbedPane.WRAP_TAB_LAYOUT和JTabbedPane.SCROLL_TAB_LAYOUT
  1. 通过JTabbedPane对象堆标签进行增删改查
addTab(String title, Icon icon, Component component, String tip):添加标签
title:标签的名称
icon:标签的图标
component:标签对应的组件
tip:光标放到标签上的提示

insertTab(String title, Icon icon, Component component, String tip, int index):插入标签页
title:标签的名称
icon:标签的图标
component:标签对应的组件
tip:光标放到标签上的提示
index:在哪个索引处插入标签页
setComponentAt(int index, Component component):修改标签页对应的组件
index:修改哪个索引处的标签
component:标签对应的组件
removeTabAt(int index):
index:删除哪个索引处的标签
  1. 设置当前显示的标签页

setSelectedIndex(int index):设置哪个索引处的标签被选中

  1. 设置JTabbedPane的其他属性
setDisabledIconAt(int index, Icon disabledIcon): 将指定位置的禁用图标设置为 icon,该图标也可以是null表示不使用禁用图标。
setEnabledAt(int index, boolean enabled): 设置指定位置的标签页是否启用。
setTitleAt(int index, String title): 设置指定位置标签页的标题为 title,该title可以是null,这表明设置该标签页的标题为空。
setToolTipTextAt(int index, String toolTipText): 设置指定位置标签页的提示文本 。
  1. 为JTabbedPane设置监听器
addChangeListener(ChangeListener l)

案例:

请使用JTabbedPane完成下图功能:

package swing.day02;

import awt.day01.Utils;

import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class JTabbedPaneTest {

    JFrame frame = new JFrame("测试JTabbedPane");
    JTabbedPane tabbedPane = new JTabbedPane(SwingConstants.LEFT,JTabbedPane.WRAP_TAB_LAYOUT);
    ImageIcon imageIcon = new ImageIcon("src/swing/img/container/open.gif");
    public void init(){

        //添加标签
        tabbedPane.addTab("用户管理",imageIcon, new JList<>(new String[]{"用户一", "用户二", "用户三"}));
        tabbedPane.addTab("商品管理", new JList<>(new String[]{"商品一", "商品二", "商品三"}));
        tabbedPane.addTab("订单管理",imageIcon, new JList<>(new String[]{"订单一", "订单二", "订单三"}));

        tabbedPane.setEnabledAt(0,false);
        tabbedPane.setSelectedIndex(1);
        tabbedPane.addChangeListener(new ChangeListener() {
            @Override
            public void stateChanged(ChangeEvent e) {
                int selectedIndex = tabbedPane.getSelectedIndex();
                JOptionPane.showMessageDialog(frame,"选中了第"+(selectedIndex+1)+"个标签");
            }
        });
        frame.setBounds(400,400,500,700);
        frame.setResizable(false);
        frame.add(tabbedPane);

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        new JTabbedPaneTest().init();
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1021412.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

springboot和vue:五、RESTful服务+HTTP状态码+swagger配置

RESTful RESTful的特点 每一个URI代表一种资源客户端使用GET、POST、PUT、DELETE四种表示操作方式的动词对服务端资源进行操作&#xff1a;POST用于新建资源&#xff08;也可以用于更新资源&#xff09;&#xff0c;PUT用于更新资源资源的表现形式是JSON或者HTML。客户端与服…

Cilium 1.11:服务网格的未来已来

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

1个G的视频能压缩到几M?视频过大这样压缩

一个G的视频能压缩到几M&#xff0c;具体取决于视频的质量、编码方式&#xff0c;以及压缩软件使用的算法。一般来说&#xff0c;高质量的视频压缩需要更高的比特率&#xff0c;这就意味着更大的文件大小。另一方面使用有效的压缩算法或降低视频的分辨率等&#xff0c;也可以减…

MySQL BufferPool缓存与Redo日志是如何提升事务性能的

文章目录 引言一、BufferPool缓存的作用与优势1.1 BufferPool缓存的定义与作用1.2 BufferPool缓存的作用1.3 Change Buffer 作用 二、BufferPool缓存的优势2.1 减少磁盘IO操作的次数2.2 提高数据的读取速度2.3 减轻磁盘负载&#xff0c;提升整体系统性能 三、BufferPool缓存的工…

全国职业技能大赛云计算--高职组赛题卷③(私有云)

全国职业技能大赛云计算--高职组赛题卷③&#xff08;私有云&#xff09; 第一场次题目&#xff1a;OpenStack平台部署与运维任务1 基础运维任务&#xff08;5分&#xff09;任务2 OpenStack搭建任务&#xff08;15分&#xff09;任务3 OpenStack云平台运维&#xff08;15分&am…

R语言画图

简单记录一下 plot(lad_profile_relative$lad, lad_profile_relative$height, type"l", lwd1.5, xlabexpression(paste("LAD ", "(", m^2, m^-3, ")" )), ylab"Height (m)")X轴数据&#xff0c; Y轴数据 type, 标记类型 lw…

FPGA的主流技术与市场表现方面的调研报告

撰写简单的FPGA的主流技术与市场表现方面的调研报告&#xff0c;表达自己的认知和发展展望&#xff0c;500字&#xff0c;图片&#xff0c;表格除外 FPGA简介 FPGA&#xff08;Field-Programmable Gate Array&#xff09;是一种可编程逻辑器件&#xff0c;是在PAL &#xff08…

电商项目高级篇-01 elasticsearch

电商项目高级篇-01 elasticsearch 1、linux下安装elasticsearch和可视化工具 1、linux下安装elasticsearch和可视化工具 将安装好jdk1.8和tomcat的centos7下安装elasticsearch docker pull elasticsearch:7.4.2docker pull kibana:7.4.2##docker下安装软件需要配置挂载。方便…

MySQL性能优化——MYSQL执行流程

MySQL 执行流程1-5如下图。 MySQL 的架构共分为两层&#xff1a;Server 层和存储引擎层&#xff0c; Server 层负责建立连接、分析和执行 SQL。MySQL 大多数的核心功能模块都在这实现&#xff0c;主要包括连接器&#xff0c;查询缓存、解析器、预处理器、优化器、执行器等。…

简单易上手,亚马逊云科技Amazon CodeWhisperer个性化辅助功能成为开发者好帮手

Amazon CodeWhisperer介绍 Amazon CodeWhisperer是亚马逊云科技出品的一款基于机器学习的通用代码生成器&#xff0c;可实时提供代码建议。类似Cursor和Github Copilot编码工具。在编写代码时&#xff0c;它会自动根据您现有的代码和注释生成建议。从单行代码建议到完整的函数&…

离线版IP归属地查询

这里简单介绍一下Ip2regionSearcher是什么&#xff1f; ip2region 是准确率 99.9% 的 IP 地址定位库&#xff0c;0.0x毫秒级查询&#xff0c;提供了 Java、PHP、C、Python、Node.js、Golang、C#、Rust、Lua的查询绑定和 Binary、B树、内存三种查询算法&#xff01; Setp1&…

【基于MBD开发模式的matlab持续集成(一)】

基于MBD开发模式的matlab持续集成 引言 或许是感受到行业内卷的愈加激烈&#xff0c;在传统制造和高新技术相结合的新能源领域对软件工程开发的要求也愈加提高&#xff0c;尤其在互联网已经大行 其道的敏捷开发&#xff0c;便顺其自然的被新能源的老板们所看重。 概述 本文…

moea项目的问题解决方案

报错1&#xff1a; (moea) aaaASUS:~/ML/paper/APG-SMOEA/code$ sh test.sh python: cant open file /home/aaa/ML/paper/APG-SMOEA/code/run_GAN-adjlvxm.py: [Errno 2] No such file or directory Finish GAN-adjlvxm on 1修改了run_benchmark.sh的line22->line23 报错2…

android去掉 原生锁屏

1. /frameworks/base/core/java/com/android/internal/widget/LockPatternUtils.java 直接 return true 2./packages/apps/Settings/src/com/android/settings/password/ScreenLockType.java 都改成 none 类型

JVM——9.对象的访问定位方式

前一篇文章&#xff0c;我们详细的了解了对象在堆内存中是如何分配的。现在&#xff0c;对象已经分配好了&#xff0c;那么要如何访问定位呢&#xff1f;下面&#xff0c;我们一起来了解一下。 目录 1.概述 2.句柄法 3.直接指针法 4.小结 1.概述 创建对象是为了使用该对象…

Lnmp架构之mysql数据库实战1

1、mysql数据库编译 编译成功 2、mysql数据库初始化 配置数据目录 全局文件修改内容 生成初始化密码并进行初始化设定 3、mysql主从复制 什么是mysql的主从复制&#xff1f; MySQL的主从复制是一种常见的数据库复制技术&#xff0c;用于将一个数据库服务器&#xff08;称为主…

MyBatisPlus(四)表映射:@TableName

表映射 数据库中的表名&#xff0c;和项目中的实体类名&#xff0c;并不相同&#xff0c;则需要通过注解TableName来进行映射。 未映射前报错示例 数据库表名&#xff1a;tb_user 实体类名&#xff1a;User 测试代码 Autowiredprivate UserMapper userMapper;Testvoid selec…

git 工作区和版本库和暂存区差异比较

一般比较代码差距习惯用Beyond Compare进行比较,然后进行一些定位和解bug操作,现使用了git 工具进行代码比较. &#xff08;1&#xff09;比较两个版本库之间的差距 git log 得到commit SHA git diff SHA1 SHA2 (2)比较工作区和版本库差异 git diff HEAD 或 git log git …

计算机网络分类

按照覆盖范围分类 &#xff08;1&#xff09;个域网&#xff1a;通常覆盖范围在1&#xff5e;10m。 &#xff08;2&#xff09;局域网&#xff1a;通常覆盖范围在10m&#xff5e;1km。 &#xff08;3&#xff09;城域网&#xff1a;覆盖范围通常在5&#xff5e;50 km 。 &…

程序安全漏洞

一、SQL注入 一种代码注入技术&#xff0c;一般被应用于攻击web应用程序。 通过在web应用接口传入一些特殊参数字符&#xff0c;来欺骗应用服务器&#xff0c;执行恶意的SQL命令&#xff0c;以达到非法获取系统信息的目的。它目前是黑客对数据库进行攻击的最常用手段之一。 常…