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中的方法。