JTable禁止编辑,但可以选中的功能
重写JTable为MyTable
MyTable.java
import java.util.Vector;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableCellRenderer;
/**
* 创建类,该类继承自JTable类成为表格
*/
public class MyTable extends JTable { // 实现自己的表格类
// 重写JTable类的构造方法
public MyTable(DefaultTableModel tableModel) {// Vector rowData, Vector columnNames
super(tableModel); // 调用父类的构造方法
}
public MyTable(final Object[][] rowData, final Object[] columnNames) {
super(rowData,columnNames);
}
// 重写JTable类的getTableHeader()方法
public JTableHeader getTableHeader() { // 定义表格头
JTableHeader tableHeader = super.getTableHeader(); // 获得表格头对象
tableHeader.setReorderingAllowed(false); // 设置表格列不可重排
DefaultTableCellRenderer hr = (DefaultTableCellRenderer) tableHeader.getDefaultRenderer(); // 获得表格头的单元格对象
hr.setHorizontalAlignment(DefaultTableCellRenderer.CENTER); // 设置列名居中显示
return tableHeader;
}
// 重写JTable类的getDefaultRenderer(Class<?> columnClass)方法
public TableCellRenderer getDefaultRenderer(Class<?> columnClass) { // 定义单元格
DefaultTableCellRenderer cr = (DefaultTableCellRenderer) super.getDefaultRenderer(columnClass); // 获得表格的单元格对象
cr.setHorizontalAlignment(DefaultTableCellRenderer.CENTER); // 设置单元格内容居中显示
return cr;
}
// 重写JTable类的isCellEditable(int row, int column)方法
public boolean isCellEditable(int row, int column) { // 表格不可编辑
return false;
}
}
Main.java
import javax.swing.*;import java.awt.*;
import java.awt.event.*;
public class Main{
public static void main(String args[]) {
WinTable Win=new WinTable();
}
}
class WinTable extends JFrame implements ActionListener {
MyTable table;Object a[][];
Object name[]={"姓名","英语成绩","数学成绩","总成绩"};
JButton button;
WinTable() {
a=new Object[8][4];
for(int i=0;i<8;i++) {
for(int j=0;j<4;j++) {
if(j!=0)
a[i][j]="0";
else
a[i][j]="姓名";
}
}
button=new JButton("计算每人总成绩");
table=new MyTable(a,name);
button.addActionListener(this);
Container con=getContentPane();
getContentPane().add(new JScrollPane(table),BorderLayout.CENTER);
con.add(new JLabel("修改或录入数据后,需回车确认"),BorderLayout.SOUTH);
con.add(button,BorderLayout.SOUTH);
setSize(200,200);
setVisible(true);
validate();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent e) {
for(int i=0;i<8;i++) {
double sum=0;
boolean boo=true;
for(int j=1;j<=2;j++){
try{ sum=sum+Double.parseDouble(a[i][j].toString());
}
catch(Exception ee){
boo=false;
table.repaint();
}
if(boo==true) {
a[i][3]=""+sum;
table.repaint();
}
}
}
}
}
效果

双击不会进入编辑状态了。
本文介绍了如何在Java Swing中创建一个JTable,使得表格内容不可编辑但用户仍然可以选择行。通过自定义MyTable类重写JTable的行为,实现双击不进入编辑模式的功能。
9769

被折叠的 条评论
为什么被折叠?



