JTable表格 表格居中(表头,内容),表格添加图片,下拉选框,添加按钮

JTable按钮列点击无反应?渲染器与编辑器分离机制详解 在Java Swing桌面开发中,JTable单元格内嵌按钮是常见需求,但许多开发者遇到按钮渲染成功却无法点击的问题。其核心原理在于JTable采用渲染与编辑分离机制:渲染器仅负责绘制外观,编辑器才提供可交互组件。理解这一机制后,通过自定义TableCellEditor返回真实JButton,并配合ActionListener回调行数据,即可实现行内操作。该技术广泛应用于配置面板、任务列表、订单管理等需要行级交互的场景。本文围绕JTable按钮列的实现,深入解析渲染器与编辑器的职责划分,提供可复用的代码方案 阅读详情

笔记整理

1. 表头居中

要使 JTable 的表头居中,可以通过直接设置表头的样式来实现。以下是一个示例:

1.获取 JTableHeader:

  • 通过 JTable 的 getTableHeader 方法获取。
    2.设置表头的默认渲染器:
  • 创建一个 DefaultTableCellRenderer 对象。
  • 设置其文本对齐方式为居中。
    -将该渲染器设置为表头的默认渲染器。
//1.获取 JTableHeader
JTableHeader header = table.getTableHeader();
//2.设置表头的默认渲染器:
DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();  
renderer.setHorizontalAlignment(SwingConstants.CENTER);  
header.setDefaultRenderer(renderer);

3.可以通过 setBackground、setForeground 和 setFont 等方法进一步设置表头的背景颜色、文本颜色和字体样式。

2.内容居中

1.在创建 JTable 时设置属性

JTable table = new JTable(data,columnNames) {
            @Override
            public TableCellRenderer getDefaultRenderer(Class<?> columnClass) {
                DefaultTableCellRenderer renderer = (DefaultTableCellRenderer) super.getDefaultRenderer(columnClass);
                renderer.setHorizontalAlignment(SwingConstants.CENTER);
                return renderer;
            }
        };

2.通过布局管理器
将 JTable 放置在一个具有居中布局特性的容器中,比如 JPanel 使用 BorderLayout 并将 JTable 添加在中间位置。

        JPanel panel = new JPanel(new BorderLayout());
        panel.add(table, BorderLayout.CENTER);

3.JTable中添加图片

通过setModel重写方法来添加图片

String[] columnNames = {"序号","36"};  // 表头
Object[][] data = {
                 {new ImageIcon("image2.jpg"),"36"},     //new ImageIcon("这里放图片地址")
                 {new ImageIcon("image2.jpg"),"36"},
        };

        JTable table=new JTable(data,columnNames);
        JScrollPane scrollPane = new JScrollPane(table);
        //重写方法添加图片
        table.setModel(new DefaultTableModel(data,columnNames){
            @Override
            public Class<?> getColumnClass(int columnIndex) {
                return getValueAt(1,columnIndex).getClass();
            }
        });
        //表格行高
        table.setRowHeight(100);

4.下拉选框

首先创建了一个表格模型,然后在添加数据时,为每一行的某一列创建并添加一个下拉框。

       String[] columnNames = {"序号","状态"};
        Object[][] data = {
                {"序号"},
                {"1"},
                {"2"},
                {"3"},
                {"4"},
                {"5"},
                {"6"},
                {"7"},
                {"8"}
        };

        JTable table = new JTable(data,columnNames);
       //表格下拉框
        DefaultTableModel model = new DefaultTableModel();
        model.setDataVector(data, columnNames);
        table.setModel(model);
        //用Vector集合来作为下拉框的选项值,方便删除修改下拉框中选项值的内容。
        Vector<String> vector = new Vector<String>();
        vector.add("a");
        vector.add("b");

        JComboBox<String> comboBox = new JComboBox<String>(vector);
        //下拉框监听
        comboBox.addItemListener(new ItemListener() {
            @Override
            public void itemStateChanged(ItemEvent e) {
                if(e.getStateChange() == ItemEvent.SELECTED) {
                    System.out.println(comboBox.getSelectedItem()); //输出选中的值
                }
            }
        });
        //表格编辑器  //getColumn(这里的数字根据你的(列数-1)来决定)
        table.getColumnModel().getColumn(1).setCellEditor(new DefaultCellEditor(comboBox));

5.添加按钮

 String[] columnNames = {"序号","测试","事件"};  //表头
        Object[][] data = {       //必须是三个,第三个可以设置为空
                {"1", "1",""},
                {"2", "2",""},
                {"3", "3",""},
                {"4", "3",""},
        };
        JTable table = new JTable(data, columnNames);
        //添加按钮     //getColumn(这里的数字根据你的(列数-1)来决定)
        table.getColumnModel().getColumn(2).setCellRenderer(new TableCellRendererButton());
        table.getColumnModel().getColumn(2).setCellEditor(new TableCellEditorButton());
        table.setRowSelectionAllowed(false);// 禁止表格的选择功能。不然在点击按钮时表格的整行都会被选中。

//重写按钮方法
 //按钮方法
    class TableCellRendererButton implements TableCellRenderer {
        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
                                                       int row, int column) {
            JButton button = new JButton("打开");
            return button;
        }
    }
    //按钮方法
    //添加事件
    class TableCellEditorButton extends DefaultCellEditor {
        private JButton btn;
        public TableCellEditorButton() {
            super(new JTextField());
            //设置点击一次就激活
            this.setClickCountToStart(1);
            btn = new JButton("打开");
            btn.addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent e) {
                    System.out.println("按钮事件触发----");       //事件
                }
            });
        }

        @Override
        public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
            return btn;
        }
    }
        
Swing JTable 按钮列实战:渲染器与编辑器原理及避坑指南 在 Java Swing 桌面开发中,JTable 是展示结构化数据的核心组件,而单元格内嵌可交互按钮是常见需求。其底层原理在于 JTable 的渲染器仅负责绘制外观,编辑器才负责事件交互,二者分离是按钮能响应的关键。掌握这一机制可显著提升表格操作效率与用户体验,广泛应用于订单管理、后台配置等场景。本文深入讲解 JTable 按钮列的渲染器与编辑器实现,涵盖行号映射、数据回写及常见问题排查,助你彻底解决按钮点不动的困扰。 阅读详情

相关推荐

JTable单元格嵌入JButton:Swing渲染与编辑机制实战

在Java Swing桌面开发中,JTable的渲染与编辑分离机制是理解表格交互的核心。TableCellRenderer负责绘制单元格外观,TableCellEditor负责处理用户输入事件,二者协同才能实现可点击的按钮列。掌握这一原理后,开发者可以在表格中嵌入JButton等交互组件,实现行级操作按钮、动态启用禁用、多按钮布局等复杂功能。该技术广泛应用于后台管理面板、数据录入界面和桌面工具开发,尤其在需要表格内联操作的场景中价值显著。本文围绕JTable嵌入JButton的完整实现,深入剖析渲染器与编辑

weixin_31742871的博客 100

Java对JTable表格的表头字体、宽度等进行设置

对表头进行设置,这里提供两种方法: 一:通过表头类(JTableHeader)设置 JTable类对象的getTableHeader()方法可以获取表头的表头类对象 下面直接看例子: package cn.com; import java.awt.Dimension; import java.awt.Font; import javax.swing.JFrame; import javax.s...

qq_44848423的博客 8938

iTunes登录协议逆向与自动化实现

本文详细解析了iTunes登录协议的逆向工程与自动化实现方法,涵盖请求体构造、签名生成和会话管理等关键技术。通过XML结构解析、X-Apple-ActionSignature生成原理及完整登录流程实现,帮助开发者高效完成iTunes自动化登录,提升工作效率。

weixin_26938645的博客 939

JTable表格文字居中

传统的Jtable中样式是很不可观的,那么我们就需要修改他的样式,下面就是我写的一个方法 代码如下: public static void setTableStyle(JTable jtb) { //设置选中行的背景色 //jtb.setSelectionBackground(new Color(224, 242, 255)); //设置表格每...

Desolation 6592

如何利用三阈值游程理论识别干旱事件_python

如果当前时间点与上一个干旱事件的结束位置相隔不超过一个月(`index - current_event['end_index']

weixin_44259522的博客 1945

面板数据分析中的随机前沿软件FRONTIER Version 4.1应用

随机前沿模型是一种用于评估单位效率的统计方法。它考虑了输入和输出的随机性,允许我们在效率评估中引入不确定性。随机前沿模型通常用于评估生产单位、金融机构、医院等各种类型的决策单元的效率。FRONTIER是一个广泛使用的随机前沿分析软件,具有用户友好的界面和强大的功能。它提供了估计效率、前沿分析和模型比较的工具,使用户能够深入研究单位的效率和绩效。面板数据是一种包含多个单位(通常是时间序列数据)的数据类型,可以用于分析单位在不同时间点的变化和效率。

目标检测专栏持续更新中,改进YOLO系列通用,适用v5、v7、v8、所有博客均是团队原创博客,所有文章禁止转载,违者必究。 2982

如何让JTable中的数据居中显示

完成这个操作首先就需要借助另一个类:DefaultTableCellRenderer 这个类继承自JLable DefaultTableCellRenderer dc=newDefaultTableCellRenderer();//

qq_45300044的博客 4349

SAP WM模块配置详解

1.给工厂/存储地点分配仓库编码 功能说明 配置路径 IMG>企业结构>分配>分配后勤执行>给工厂/存储地点分配仓库编码 业务示例 配置步骤 2.定义仓库号码控制参数 功能说明 配置路径 IMG>后勤执行>仓库管理>主数据>主数据>定义仓库号码控制参数 业务示例 配置步骤 3.定义编码范围 功能说明 配置路径 IMG>后勤执行>仓库...

weixin_40672823的博客 2万+

【swing】Jtable表头及表格加CheckBox

Overrideif (column == 1 || column == 2) {// 列不可编辑} else {super();i++) {

smileageHi的博客 1396

ais信号接收设备_国内首款基于软件无线电技术的AIS基站投入测试使用

星网宇达子公司北京凯盾环宇科技有限公司经过多年的潜心研发,成功研制出国内首台基于软件无线电(SDR)的CATON 9011 AIS基站。该基站采用软件无线电技术,利用软件数字技术代替传统的模拟电路,大大的降低了模拟器件的使用率,提高了基站的可靠性和使用年限。CATON 9011 AIS基站研制依据ITU-R M.1371-5、IEC 62320-1、IEC 61162-1等国际标准,兼容...

weixin_29057163的博客 2334

让 SAP HANA 查询飞起来:彻底避开隐式类型转换的性能暗礁

SAP HANA性能优化:警惕隐式类型转换陷阱 隐式类型转换是SAP HANA项目中常见的性能隐患。当SQL表达式两侧数据类型不匹配时,系统会自动进行类型转换,这种看似便利的操作可能导致: 过滤条件无法下推,扫描范围扩大 列存引擎优势丧失,触发中间结果物化 执行计划走向低效路径 治理方案包括: 从源头统一数据类型,确保常用比较字段类型一致 将显式转换应用于常量而非整列 使用生成列预先转换存储,避免运行时计算 排查方法: 通过SQL Plan Cache定位高频查询 分析执行计划中的转换迹象 重点关注VARC

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 11万+

javaGUI的table表格设置为下拉框

【代码】javaGUI的table表格设置为下拉框。

m0_64733451的博客 692

常说的cache机制到底是什么?L1 cache和 L2 cache是什么?

一文带你迅速了解CPU内的cache机制!!图解多核CPU中的多级cache结构。为何有的处理器没有cache?

车载系统攻城狮 5878

java中表格不显示表头_表格(隐藏表头)

前面讲了JTale表头的基本属性设置和表头放置组件之后,表头的显示效果操作也就这么多了,更复杂的显示则是表头的合并,单行行合并、多行多列合并等.再说那个之前先看其余的一种情况:说是对表头的修改吧,其实代码中对JTable的表头的代码很少只有几句,但是效果的确是体现在表头上的.先看图,一个基本的JTable:这是最简单的JTable生成的,但是很多时候我们觉得列太多了,不想看到这么多,需要隐藏一部分...

weixin_39526546的博客 1227

Python爬虫实战:爬取ETF基金持仓变化

在python复制编辑本文详细介绍了如何使用Python的Scrapy框架爬取ETF基金的持仓变化信息,包括项目的搭建、数据的提取与存储、以及数据的可视化分析。通过本项目,读者可以掌握基本的网页爬虫技术,并应用于实际的财经数据采集与分析中。

2201_76125261的博客 629

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

JTable显示图片

显示的效果:   代码: import javax.swing.*; import javax.swing.filechooser.FileSystemView; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableCellRenderer; import javax.swing.t...

Donny的专栏 2373

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

JTable

一段新的旅程开始… 我的博客旅程开始啦,cute 玲 主题:jtable 布局 表格设置 可视化插件的使用方法 1、安装eclipse可视化插件 2、打开一个java文件,空白处右键Open With -->WindowBuilder Editor 更过细节,,,百度 思路 先通过可视化界面设置完成各个jpanel,jtable,组件,在给jpanel设置属性,jtable设置属性 监听 数据 ,组件信息 0.常用方法 1.表格隐藏列 2.表格监听 3.表格选中行监听及数据获取 4.表格数据居中

weixin_45456407的博客 654

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

JTable单元格放自定义控件(一)-如何在JTable的单元格放JPanel

原文链接:http://blog.sina.com.cn/s/blog_7f1c8c710101hdpf.html 最近自己尝试着模仿着实现一款非常有名的进销库存管理系统(智慧记)里面的一个功能。功能如下下图所示。 JTable tableA的第一列(品名规格)放的是自定义JPanel控件,JPanel上面放的是JTextfield和JButton,点击每一行第一列的JButton会弹出弹出一个J...

weixin_44310553的博客 1849

java gui 添加配置_Java GUI界面补充总结(不定期补充)

一、Java中如何设置各类组件透明感谢原文:https://kslsi.iteye.com/blog/2096608补充:Frame透明:AWTUtilities.setWindowOpacity(alpha, 0.6f);//设置透明度 (不再具有跨平台性,可以使用jar+platform实现跨平台)对于一般的swing组件,设置透明就只用一句代码:nameOfComponent.setOpaq...

weixin_42525106的博客 523

Java中GUI界面美化帮助类总结

1、更换面板JPanel的背景只需重写JPanel类中的paintComponent(Graphics gs)方法即可 import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.FileInputStream; import java.io.

Java_han的专栏 1万+

swing JTable根据单元格不同内容,对单元格进行个性化渲染

网上搜索的多为整列渲染,某门不着,甚是苦恼。琢磨出一种“逐格”渲染的方法,供象我一样曾经苦恼过的朋友参考。

weixin_45681602的博客 791

MyEclipse8.5中的可视化界面JTable和JComboBox应用,及常用方法

MyEclipse8.5中的可视化界面JTable和JComboBox应用,及常用方法。 一、可视化界面的创建 创建项目(Java):因为比较简单就不详细介绍。 创建一个可视化界面。      (1)右键src下的一个包(用于保存可视化界面)->new->Matisse Form.      (2)此时就会来到这个界面,在Name框中输入类名。然后在Select template:点击JFram

做技术,坚持才是最重要的,一时的热情只是暂时的进步 1453

java 组件透明_java中如何设置各类组件透明

失眠并不是一无是处,至少我认真完成了我的工作,而且还收获了很多。对于一般的swing组件,设置透明就只用一句代码:nameOfComponent.setOpaque(false);但这一句代码不是万能的,当遇到JButton、JScrollPane、JTable等等组件的时候,这一句代码是完全不够用的,下面来总结一下吧~JButton,按钮组件,用下面这句代码将其设置为透明:jbt_login....

weixin_42318815的博客 880

JTable内容保存至e此博文包含图片xcel

JTable内容保存至e xcel   (2009-12-30 15:44:02) 转载▼ 标签:  杂谈 分类: 计算机视觉 import java.awt.*; import java.awt.event.*; import java.util.Vector; import javax.swing.*;

CARROTHWQ的专栏 615

“设置jtable单元格颜色,以及jtable中实现复选框”的程序

TableCellRenderer就是用来绘制展示当前cell单元数值内容的,你可以用文字、数值或者图片来表示内容,当然最强大展示方式的就是通过自定义自己的renderer组件,通过Java2D来绘制各种天花乱坠的效果。 TableCellEditor主要是用来当用户点击在具体cell时进行编辑的组件,所以TableCellEditor除了具有TableCellRenderer一样的绘制功能外还

神奇物种 的专栏 4162
上一篇: win11自动关机
下一篇: java JTable 的获取当前行号
csdn_HPL
博客等级 码龄6年 171粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值