正文
描述:本文主要关于三部分。第一部分,使表格文字居中,并设置表格相关样式;第二部分,当进入表格单元格设置相关样式;第三部,当进入表格单元格时,默认选中该单元格所有内容。
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();
}
}