JTable禁止编辑,但可以选中的功能

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

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();
             }
        }
     } 
  }
}

效果

效果图
双击不会进入编辑状态了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值