Java Swing JTable 表格【16:复选框JCheckBox作为表格元素】

本文介绍如何使用复选框作为编辑器来编辑表格中的单元格,通过具体实例展示了如何设置默认选中状态,并提供了完整的Java代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一篇介绍了组合列表框作为表格元素的例子,这篇根据上篇的DefaultCellEditor的构造方法,再来练习一个复选框的例子

这个例子首先在创建数据时,复选框那一列的值默认值一个给得是false,一个给的是true,所以界面打开的时候会一个是选中,一个是没选中,如图:

这里写图片描述

代码如下:

package com.acconsys.swing.chapter14;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.DefaultCellEditor;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;

/**
 * 使用复选框作为编辑器来编辑表格中的单元格
 * 
 * @author burns
 * 
 */
public class Test18 {

    public Test18() {
        JFrame f = new JFrame();
        MyTable18 mt = new MyTable18();
        /**
         * 由于MyTable类继承了AbstractTableModel,并且实现了getColmunCount()、getRowCount()、
         * getValueAt()方法 由此可以通过通过MyTable18来产生TableModel的实体
         */
        JTable t = new JTable(mt);
        JCheckBox jc1 = new JCheckBox();
        t.getColumnModel().getColumn(4)
                .setCellEditor(new DefaultCellEditor(jc1));
        t.setPreferredScrollableViewportSize(new Dimension(550, 30));
        JScrollPane s = new JScrollPane(t);
        f.getContentPane().add(s, BorderLayout.CENTER);
        f.setTitle("ColumnModelDd");
        f.pack();
        f.setVisible(true);
        f.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }

    public static void main(String[] args) {
        new Test18();
    }
}

class MyTable18 extends AbstractTableModel {

    Object[][] p = {
            { "王鹏", new Integer(66), new Integer(32), new Integer(98), false },
            { "宋兵", new Integer(85), new Integer(69), new Integer(154), true }, };

    String[] n = { "姓名", "语文", "数学", "总分", "及格与否" };

    @Override
    public int getRowCount() {
        return p.length;
    }

    @Override
    public int getColumnCount() {
        return n.length;
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        return p[rowIndex][columnIndex];
    }

    @Override
    public String getColumnName(int column) {
        return n[column];
    }

    @Override
    public Class<?> getColumnClass(int columnIndex) {
        return getValueAt(0, columnIndex).getClass();
    }

    @Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        return true;
    }

    @Override
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
        p[rowIndex][columnIndex] = aValue;
        fireTableCellUpdated(rowIndex, columnIndex);
    }
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱的叹息

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值