ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

JTable单元格相关样式设置

2021-11-13 21:59:19  阅读:178  来源: 互联网

标签:表格 样式 单元格 JTable Color 选中 editor table


正文

描述:本文主要关于三部分。第一部分,使表格文字居中,并设置表格相关样式;第二部分,当进入表格单元格设置相关样式;第三部,当进入表格单元格时,默认选中该单元格所有内容。

1. 表格文字居中

使用DefaultTableCellRenderer设置文字居中对齐,如图:

在这里插入图片描述
表格相关样式:
在这里插入图片描述

2. 进入表格单元格相关样式设置,需要利用匿名类重写JTable的prepareEditor方法,如图:

在这里插入图片描述

3. 进入某个单元格选中该单元格的所有类容,利用匿名类重写editCellAt方法,如下图所示:

在这里插入图片描述

其中:

EventQueue.invokeLater(()->((JTextComponent)editor).selectAll()); 

里面的**()->((JTextComponent)editor).selectAll()Lambda表达式,实现Runnable接口中的run方法,相当于一个Runnable接口的子类**;EventQueue.invokeLater其含义是完成所有被提交到EventQueue中的事件后在去调用其形参Runnable对象的run方法
因为进入单元格编辑要鼠标连续单击两次,如不使用上述方式,直接使用((JTextComponent)editor).selectAll();会在鼠标第一下单击,尚未开单元格编辑状态时,选中所有文本;当鼠标第二次单击,开启单元格编辑,文本选中状态却被取消(注:若文本已被选中,再单击一下,就会取消选中

完整代码:

package first;

import javax.swing.*;
import javax.swing.table.*;
import javax.swing.text.JTextComponent;

import java.awt.*;
import java.awt.event.MouseEvent;
import java.util.EventObject;

public class TableCell extends JFrame{
	public TableCell() {
		super("表格单元格设置");
		String header[]= {"书号","书名","价格"};
		Object obj[][]= {{"01","《数据结构》","300"},{"02","《计算机组成原理》","200"}
		,{"03","web前端设计","100"}};
		
		Font f=new Font("黑体", Font.BOLD, 16);
		
		JTable table=new JTable(obj,header) { // 使用匿名类,重写父类方法,修改table编辑时的各种颜色
			public Component prepareEditor(TableCellEditor editor,int row,int col) { 
				JTextField c=(JTextField)super.prepareEditor(editor, row, col);
				c.setBackground(Color.cyan);  //进入单元格的背景颜色 
				c.setHorizontalAlignment(JTextField.CENTER);    // 进入单元格使文本居中
				c.setFont(f);
				c.setForeground(Color.BLUE);  //进入单元格文本颜色
				c.setSelectionColor(new Color(0,120,215));	//选中文字时区域的颜色
				c.setSelectedTextColor(Color.magenta);	  // 选中文字时文字的颜色			
				return c;
			}
			public boolean editCellAt(int row,int column,EventObject e) { //进入单元格选中,选中所有文字
				boolean result=super.editCellAt(row, column,e); //返回结果使用父类生成 的
				Component editor=super.getEditorComponent();   
				if(editor==null||!(editor instanceof JTextComponent))  //没有选中或选中的不是文本
					return result;
				//鼠标要双击才能进入
				EventQueue.invokeLater(()->((JTextComponent)editor).selectAll()); 
				return result;
			}
		};
		
		DefaultTableCellRenderer render=new DefaultTableCellRenderer(); // 使表格文字居中
		render.setHorizontalAlignment(SwingConstants.CENTER);
		table.setDefaultRenderer(Object.class, render);//第一个参数填Object,因为表格数据使用的是二维Object数组
		
		table.setFont(f);
		table.setRowHeight(24);
		table.setBackground(Color.DARK_GRAY);
		table.setForeground(new Color(205, 107, 104));
		table.setSelectionForeground(Color.white);
		table.setSelectionBackground(Color.PINK);
		
		
		JScrollPane scroll=new JScrollPane(table); // table要加入scrollPane才能显示表头
		
		this.getContentPane().add(scroll);
		this.setSize(700,500);
		this.setLocationRelativeTo(null);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
	}
	public static void main(String args[]) {
		new TableCell();
	}
}

效果展示:

在这里插入图片描述

标签:表格,样式,单元格,JTable,Color,选中,editor,table
来源: https://blog.csdn.net/qq_45086308/article/details/121310582

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有