渲染器

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

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并作相应的修改就可以达到目的,

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐