Java Swing JTable 表格【9:表格使用渲染器DefaultTableCellRenderer】

来源:互联网 发布:linux如何更改用户权限 编辑:程序博客网 时间:2024/05/18 03:03

渲染器

渲染器用来绘制表格中的单元格,渲染器也可以从表格中提取每个单元格的方法,所以,渲染器也被称为绘制器,其实,当一个表格能够在容器中显示出来,是依靠系统默认的渲染器来绘制的,而且是一个单元格,一个单元格绘制的,所以哥它可以单独的将某个单元格提取出来,也可以针对表格中任意的单元格进行编辑,这也是渲染器的最大用处之一。
下面通过例子来演示渲染器来渲染表格中不同行的颜色。

package com.acconsys.swing.chapter14;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Component;import java.awt.Dimension;import java.awt.Toolkit;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import javax.swing.JFrame;import javax.swing.JScrollPane;import javax.swing.JTable;import javax.swing.table.DefaultTableCellRenderer;import javax.swing.table.DefaultTableModel;/** * 展示使用渲染器让表格中偶数行的颜色为蓝色,奇数行不变 *  * @author Administrator *  */public class Test11 extends JFrame {    Object[][] p = { { "王鹏", "91", "100", "191" },            { "朱学莲", "82", "100", "182" }, { "梅婷", "47", "100", "147" },            { "赵龙", "61", "100", "161" }, { "李兵", "90", "100", "190" }, };    String[] n = { "姓名", "语文", "数学", "总分" };    // 界面组件----------------    // 中底层滚动面板    private JScrollPane scroPanel = new JScrollPane();    // 列表默认TableModel    private DefaultTableModel model;    private JTable table;    public Test11() {        config();        addListener();        confcolor();    }    /**     * 方法:界面构建     */    private void config() {        table = new JTable(model = new DefaultTableModel(p, n));        DefaultTableCellRenderer ter = new DefaultTableCellRenderer() {            @Override            public Component getTableCellRendererComponent(JTable table,                    Object value, boolean isSelected, boolean hasFocus,                    int row, int column) {                // 设置偶数行颜色                if (row % 2 == 0) {                    setBackground(Color.white);                }                // 设置奇数行颜色                else if (row % 2 == 1) {                    setBackground(new Color(206, 231, 255));                }                return super.getTableCellRendererComponent(table, value,                        isSelected, hasFocus, row, column);            }        };        for (int i = 0; i <= 3; i++) {            table.getColumn(n[i]).setCellRenderer(ter);        }        scroPanel.getViewport().setBackground(Color.WHITE);        scroPanel.getViewport().add(table);        // 总体界面布局----------------------        getContentPane().add(scroPanel, BorderLayout.CENTER);    }    /**     * 方法:界面显示     */    private void confcolor() {        setTitle("编辑器的测试");        setSize(500, 400);        Toolkit kit = Toolkit.getDefaultToolkit();        Dimension screenSize = kit.getScreenSize();        Dimension frameSize = this.getPreferredSize();        setLocation(screenSize.width / 2 - (frameSize.width) / 2,                screenSize.height / 2 - (frameSize.height / 2));        setResizable(false);        setVisible(true);    }    /**     * 添加事件监听addListener()     */    private void addListener() {        this.addWindowListener(new WindowAdapter() {            // 添加窗口关闭事件            @Override            public void windowClosing(WindowEvent e) {                System.exit(0);            }        });    }    /**     * 程序入口main()     *      * @param args     */    public static void main(String[] args) {        new Test11();    }}

运行结果如图:

这里写图片描述

JTable的API并没有提供更改表格行或列的颜色的能力,表格的表头和内容呈现的形式都是由相应的Renderer(渲染器)来控制的,所以,只需要继承单元格默认的Renderer并作相应的修改就可以达到目的,

0 0
原创粉丝点击