自定义表格的功能和样式

package 自定义表格;

import java.awt.BorderLayout;
import java.awt.Color;
import java.util.Vector;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableModel;

public class ExampleFrame03 extends JFrame{
    
    public static void main(String[] args) {
        ExampleFrame03 frame=new ExampleFrame03();
        frame.setVisible(true);
    }
    
    public ExampleFrame03() {
        super();
        setTitle("自定义表格");
        setBounds(100,100,500,375);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JScrollPane scrollPane =new JScrollPane();
        getContentPane().add(scrollPane, BorderLayout.CENTER);
        String[] columnNames= {"A","B","C","D","E","F","G"};
        Vector<String> columnNameV = new Vector<>();//定义列名
        for(int column=0;column<columnNames.length;column++) {
            columnNameV.add(columnNames[column]);
        }
        Vector <Vector<String>> tableValueV=new Vector<>();//定义表格数据
        for(int row=1;row<21;row++) {
            Vector <String> rowV=new Vector<String>();//定义行
            for(int column=0;column<columnNames.length;column++) {
                rowV.add(columnNames[column]+row);
            }
            tableValueV.add(rowV);
        }
        JTable table = new MTable(tableValueV,columnNameV);
        table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);//关闭表格列的自动调整功能
        table.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);//选择模式为单选模式
        table.setSelectionBackground(Color.YELLOW);//被选择行的背景颜色为黄色
        table.setSelectionForeground(Color.RED);//被选择行的前景色为红色
        table.setRowHeight(30);//表格的行高为30像素
        scrollPane.setViewportView(table);
    }
    public class MTable extends JTable {

        public MTable(Vector<Vector<String>> tableValueV, Vector<String> columnNameV) {
            super(tableValueV,columnNameV);
        }
        
        /*
         * 定义表头的功能
         */
        
        public JTableHeader getTableHeader() {
            JTableHeader tableHeader=super.getTableHeader();//获得表头对象
            tableHeader.setReorderingAllowed(false);//设置表格列不可重排
            
            DefaultTableCellRenderer hr =(DefaultTableCellRenderer)tableHeader.getDefaultRenderer();//获得表格头的单元格对象
            
            hr.setHorizontalAlignment(DefaultTableCellRenderer.CENTER);//设置列名内容居中显示
            
            return tableHeader;
            
        }
        /*
         * 定义单元格的功能
         * */
        public TableCellRenderer getDefaultRenderer(Class<?> columnClass) {//设置单元格内容居中显示
            DefaultTableCellRenderer cr=(DefaultTableCellRenderer)super.getDefaultRenderer(columnClass);//获得表格的单元格对象
            cr.setHorizontalAlignment(DefaultTableCellRenderer.CENTER);//设置单元格内容居中显示
            return cr;
        }
        
        /*
         * 设置表格不可编辑
         * */
        public boolean isCellEditable(int row,int column) {
            return false;
        }
        
    }
}

设置表格被选中行的样式可以直接使用表格的引用名.setXXX方法设置。
如果需要设置表头和单元格的功能样式需要重构JTable中的方法。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 本来只是对高体报告的记录, 没想到变成了对所有事情记录的报告, 今天也算是遵从了昨天的规定, 不过有些地方还是需要...
    Vincent_7d59阅读 445评论 0 0
  • 关于我们的故事: “你是谁?从哪来?到哪去?”这个经典的保安三连问看似好笑,却很真实。 曾几何时,我们自己也都有过...
    认知领域Knowin阅读 3,904评论 7 132
  • 在家居生活中,家居手工是我们常见的,也称为家居DIY。TA的最高境界就是没有想不到,只有做不到。爱动手的你,是否能...
    窗爸爸家居阅读 412评论 2 10
  • 他今年20岁,青春绽放。喜欢跳舞。喜欢喝酒。喜欢到处自由旅行。他还参加了马拉松比赛。 见到他,你会吃一惊。小小的轮...
    晋文笔记阅读 207评论 0 1
  • 夜凉月稀疏,隔岸戏子歌。 无事抱诗书,徒唱喝清愁。 只身影单薄,歇靠木难支。 嘘何叹寒声,晨间飘零雨。 不知来年君...
    清焰如风阅读 346评论 2 3

友情链接更多精彩内容