JTable单元格相关样式设置

正文

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

1. 表格文字居中

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

JTable单元格相关样式设置
表格相关样式:
JTable单元格相关样式设置

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

JTable单元格相关样式设置

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

JTable单元格相关样式设置

其中:

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单元格相关样式设置

上一篇:vscode设置自动换行


下一篇:elementui+vue中富文本编辑框 vue-quill-editor 触发验证