问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java swing如何在JTable一个单元格添加多个复选框

发布网友 发布时间:2022-05-01 16:11

我来回答

6个回答

热心网友 时间:2022-04-23 22:37

java swing中在jTable中添加多个复选框的方式如下:

import java.awt.Component;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 
 import javax.swing.*;
 import javax.swing.table.*;
 
 
 public class MyFirstJFrame extends JFrame {
     
     // 作为测试的main方法
     public static void main(String[] args) {
         new MyFirstJFrame().setVisible(true);
     }
     
     /**
      * 构造方法
      */
     public MyFirstJFrame() {
         InitialComponent();
     }
     
     /**
      * 初始化组件的方法
      */
     private void InitialComponent(){
         // 设置窗体参数
 
         // 设置布局模式
          setLayout(null);
         // 设置窗体大小
         setSize(480, 360);
         // 设置窗体居中(非常规方法)
          setLocationRelativeTo(null);
         // 关闭窗体退出程序
         setDefaultCloseOperation(DISPOSE_ON_CLOSE);
         
         // 初始化面板
         panel = new JPanel();
         panel.setSize(this.getWidth(), this.getHeight());
         panel.setLocation(0,0);
         panel.setLayout(null);
         
         // 初始化表格
         table = new JTable(new DefaultTableModel(new Object[][]{{"第一行"},{"第二行"},{"第三行"},{"第四行"}}, new String[]{"测试行1","测试行2"}){
             /* (non-Javadoc)
              * 重写方法,判断表单元格是否可编辑
              * 可以通过row和column索引判断某一个单元格是否可编辑
              * 此处设为都不可编辑
              * @see javax.swing.table.DefaultTableModel#isCellEditable(int, int)
              */
             @Override
             public boolean isCellEditable(int row, int column) {
                 return false;
             }
         });
         
         // 开始向表格中添加复选框(注意:此示例较为简单,缺省很多判断,也没有动态代码支持)
         // 通过设置列渲染
         
         // 方法一:直接方式 使用TableColumn的setCellRenderer方法(推荐)
         // 此方法可以设置某一列的渲染(即使用某一个组件--即控件来显示单元格数据)
         table.getColumnModel().getColumn(1).setCellRenderer(new TableCellRenderer(){
 
              /*(non-Javadoc)
              * 此方法用于向方法调用者返回某一单元格的渲染器(即显示数据的组建--或控件)
              * 可以为JCheckBox JComboBox JTextArea 等
              * @see javax.swing.table.TableCellRenderer#getTableCellRendererComponent(javax.swing.JTable, java.lang.Object, boolean, boolean, int, int)
              */
             @Override
             public Component getTableCellRendererComponent(JTable table,
                     Object value, boolean isSelected, boolean hasFocus,
                     int row, int column) {
                 // 创建用于返回的渲染组件
                 JCheckBox ck = new JCheckBox();
                 // 使具有焦点的行对应的复选框选中
                 ck.setSelected(isSelected);
                 // 设置单选box.setSelected(hasFocus);
                 // 使复选框在单元格内居中显示
                 ck.setHorizontalAlignment((int) 0.5f);
                 return ck;
             }});
         
         // 方法二:先设置列编辑器,然后设置单元格渲染
         // 设置列编辑器
         // 在以复选框为对象设置列编辑器时,必须保证该列能够被编辑,否则无法更改状态
         // (此步骤可以省略,省略时不要忘记将列设为不可编辑)
         // table.getColumnModel().getColumn(1).setCellEditor(new DefaultCellEditor(new JCheckBox()));
         
         // 设置单元格渲染(这里是设置表格级别的渲染)
         /*table.setDefaultRenderer(Object.class, new TableCellRenderer(){
 
             @Override
             public Component getTableCellRendererComponent(JTable table,
                     Object value, boolean isSelected, boolean hasFocus,
                     int row, int column) {
                 // 判断是否为需要渲染的列
                 if(column == 1){
                     // 和方法一基本一致
                     JCheckBox box = new JCheckBox();
                     box.setSelected(isSelected);
                     // 设置单选box.setSelected(hasFocus);
                     box.setHorizontalAlignment((int) CENTER_ALIGNMENT);    // 0.5f
                     return box;
                     }
                 // 如果不是需要渲染的列,封装文本域显示数据
                 return new JTextArea(value.toString());
             }});*/
         
         // 在多选是需要按住Ctrl键或者鼠标按住拖过连续的需要选中的行,应该给用户说明
         // 第一种方法是被推荐的,因为它具有选中的高亮显示,界面能更加友好
         table.setSize(panel.getWidth(),panel.getHeight() - 90);
         table.setLocation(0, 0);
         
         
         btn = new JButton("Test");
         btn.setSize(80,40);
         btn.setLocation((panel.getWidth()) / 2 - 40, panel.getHeight() - 80);
         
         // 按钮点击时显示当前选中项
         btn.addActionListener(new ActionListener(){
 
             @Override
             public void actionPerformed(ActionEvent e) {
                 for(int rowindex : table.getSelectedRows()){
                     JOptionPane.showMessageDialog(null, rowindex + " " + table.getValueAt(rowindex, 0));
                 }
             }});
         
         panel.add(table);
         panel.add(btn);
         this.add(panel);    
         
     }
     
     // 定义一些必要的组件
     private JPanel panel;
     private JTable table;
     private JButton btn;
 }

热心网友 时间:2022-04-23 23:55

写了个Demo 效果如图

原理:

jtable可以为指定的列设置一个渲染器, 用来呈现外观(比如让外观显示为复选框,但此时复选框并不能点击选择,他仅仅是个外观而已)

还需要为指定的列设置一个编辑器, 用来处理按钮点击后的编辑(让复选框可以选择)

实现过程

写一个类去继承AbstractTableModel , 用来当数据模型

写一个类去实现TableCellRenderer 接口. 用来当渲染器

写一个类去实现TableCellEditor 接, 用来当编辑器

然后把给表格JTable填充数据, 设置渲染器和编辑器即可

热心网友 时间:2022-04-24 01:30

有两个方法,
一个是自定义渲染器,自己添加。(或是用JDK已有的渲染器也可以)
二是重写TableModel的getColumnClass

如下就可以。
public Class<?> getColumnClass(int c) {
return getValueAt(0, c).getClass();
}

这样,这一列的数据,都是boolean型的,就会变成复选框追问有这样的demo吗,发我邮箱看一下,谢谢,1846660878@qq.com

追答JDK的安装目录下就有demo

热心网友 时间:2022-04-24 03:21

定义一个含多个复选框的单元格Panel,放置到自定渲染器中。
然后覆写返回值的方法,将复选框选中结果返回就好。
相关示例网上都有,还是自己多动手找找吧追问非常感谢。

热心网友 时间:2022-04-24 05:29

用TableModel
在Rending时,添加

热心网友 时间:2022-04-24 07:54

楼主解决了吗?我也想实现这样的表格单元
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 如何避免wps卡顿? 属鼠的男人找对象是属什么,属鼠的人和什么属相合 96年鼠的姻缘在哪年 属相相合年份运势提升 2024属鼠找对象属什么最佳 黑客攻击网站能报案吗 黑客攻击报案有用吗 Java中 单选按钮、复选按钮、文本框、文本域、列表、标签,都是什么啊,我知道文本域是TextArea 如何获取多选按钮的值,并把他插入数据库中,java的问题 Java怎么选定多个多选框点提交生成txt文件 java方法如何判断多选框是够勾选 java中怎么 把多个多选的按钮的值添加到数据库中 {有代码吗,谢谢} Java在页面写什么可以点击按钮弹出多选框(如:多个选项可以选择,带有确认取消按钮)呢? oracle导入时1017错误怎么解决? 截图的技巧 对县政协机关支部班子的意见怎么写 中共中央关于加强人民政协工作的意见的深入开展人民政协的参政议政 区政协召开老领导座谈会 征求对区政协工作的意见建议 - 信息提示 男属鼠的1996年生的命运怎么样? 96年属鼠男孩命中缺木,平时多穿什么颜色的衣服好? 运用我国政党制度的相关知识,给新时期人民政协如何履行好职能提供几点合理化建议? 男1996年属鼠个农历八月初四上午十点出生命运 属鼠男1996年4月19日生命运 1996年属鼠9月初10早上7.30出生命运怎么样男? apple怎么重装系统 苹果系统怎么重做 java复选框多选 小孩一天最多可以吃几个猕猴桃 java c/s架构多选框实现 java实验题目:使用单选按钮、复选按钮、文本框实现学生信息基本录入。 java中选择框的使用方法 小孩猕猴桃一天吃几个最好 java 可以让多个类形成的按钮和复选框组成在一个框架里面组合么? 19个月小孩一天吃两个100克左右的猕猴桃会不会多 小孩子每天吃一个猕猴桃,是不是可以 巴黎cac40指数的简介 平安银行车抵贷90000分36期还每个月还多少 java脚本让所有复选框全部选中 十二岁儿童可以每天吃猕猴桃吗 Java中在复选按钮监听事件中加入一个表格并打印数据库? 平安汽车抵押贷款利息怎么算 CAC 40 指数是什么意思? JAVA编写一个有下拉框,单选框,复选框,单选按钮,应该用什么布局?_百度... 蒸汽锅炉的使用有哪些注意事项? 平安银行贷款利息怎么算的,贷款7万36期要还多少钱。。。。。放贷快嘛, java菜单中的复选框checkboxmenuitem,如果有两个选项,选中一个让另一个不选中要怎么办啊?