Java Swing JTable 表格【11:表格使用自定义渲染器】

TableCellRenderer接口定义了JTable渲染器接口:

贴图如下:
这里写图片描述
这里写图片描述
渲染器对象作为一个方法的参数来实现针对表格中的单元格的不同设置的方法之一:

public void setDefaultRenderer(Class columnClass,TableCellRenderer Renderer);

一下是一个自定义渲染器的代码,在第二行第三列内置一个表格:

package com.acconsys.swing.chapter14;

import java.awt.BorderLayout;
import java.awt.Component;

import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;

/**
 * 展示如何利用渲染器在表中再插入一个表格
 * 
 * @author Administrator
 * 
 */
public class Test13 extends JTable {

    public Test13() {
        JFrame f = new JFrame("测试窗口");
        f.setVisible(true);
        f.setSize(800, 400);
        // f.pack();
        Object[][] p = { { "王鹏", "91", "100", "191" },
                { "朱学莲", "82", "100", "182" }, { "梅婷", "47", "100", "147" },
                { "赵龙", "61", "100", "161" }, { "李兵", "90", "100", "190" }, };
        String[] n = { "姓名", "语文", "数学", "总分" };

        // 界面组件
        JScrollPane scroPanel = new JScrollPane(this);// 中底层滚动面板
        f.getContentPane().add(scroPanel, BorderLayout.CENTER);
        setModel(new DefaultTableModel(p, n));
        // 将第2行噶偶设置宽一些,使潜入的表格显示起来好看些
        setRowHeight(1, super.getRowHeight() * 4);
    }

    @Override
    public TableCellRenderer getCellRenderer(int row, int column) {
        // 重载getCellRenderer提供自己的TableCellRenderer
        if (row == 1 && column == 2) {
            return new TableCellRenderer() {
                // 在第2行,第3列提供一个子表的渲染器
                JTable subTable = new JTable(new DefaultTableModel(4, 4));

                // 子表可以自己定制内容
                @Override
                public Component getTableCellRendererComponent(JTable table,
                        Object value, boolean isSelected, boolean hasFocus,
                        int row, int column) {
                    // 实现TableCellRender的方法,提供该子表渲染器
                    return subTable;
                }
            };
        } else if (column == 0) {
            return new TableCellRenderer() {
                // 在第2行,第3列提供一个子表的渲染器
                JCheckBox checkBox = new JCheckBox();

                // 子表可以自己定制内容
                @Override
                public Component getTableCellRendererComponent(JTable table,
                        Object value, boolean isSelected, boolean hasFocus,
                        int row, int column) {
                    // 实现TableCellRender的方法,提供该子表渲染器
                    return checkBox;
                }
            };
        } else {
            return super.getCellRenderer(row, column);
            // 如果是其他地方的表格,沿用父类中提供的渲染器
        }
    }

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

运行如图:

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

爱的叹息

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

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

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

打赏作者

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

抵扣说明:

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

余额充值