禁用JTable中的用户编辑
创建JTable组件时,默认情况下启用单元格编辑。 如何阻止用户编辑JTable的内容?
JTable使用AbstractTableModel对象。 这是你传递给JTable的构造函数的东西。 您可以按如下方式编写自己的AbstractTableModel
public class MyTableModel extends AbstractTableModel { public boolean isCellEditable(int row, int column){ return false; } }
然后初始化你的JTable
JTable myTable = new JTable(new MyTableModel());
您可以使用以下代码创建JTable:
JTable jTable = new JTable() { private static final long serialVersionUID = 1L; public boolean isCellEditable(int row, int column) { return false; }; };
基本上我们在这里做的是重写isCellEditable
并始终从它返回false。 这将使一个非editabe JTabel。
myTable.setDefaultEditor(Object.class, null);
嗨,我在java上工作很多,所以我会按照你的方式给你:第一次在netbeans下有两种可能性。 去自定义代码并使其像这样:
JTArticleJPAddArrticle = new javax.swing.JTable(); JTArticleJPAddArrticle.setBackground(new java.awt.Color(204, 204, 255)); JTArticleJPAddArrticle.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { }, new String [] { "Reference","Libellé","Marque","Prix d'achat","Prix de vente","Quantité","Total","Etat" } ){ public boolean isCellEditable(int rowIndex, int columnIndex) { return false; } }); jScrollPane8.setViewportView(JTArticleJPAddArrticle);
我的另一种方法是创建表模型的实例。 这是第二种方式:
model=new DefaultTableModel(head, 0){ @Override public boolean isCellEditable(int i, int i1) { return false; //To change body of generated methods, choose Tools | Templates. } }; jtable.setmodel(model);
享受这个对我来说很好。 我想做的就是帮助你们,因为我早就得到了帮助。
你有没有尝试过:
JTable table = new JTable(); table.setEnabled(false);
关于JComponent.setEnabled(boolean)它说:
设置是否启用此组件。 启用的组件可能会响应用户输入,而未启用的组件则无法响应用户输入。 某些组件在被禁用时可能会改变其视觉表示,以便向用户提供他们无法接受输入的反馈。
说到JTable,它似乎根本没有提供任何视觉反馈。 凭借仍然能够点击列标题的好处。 在我的实现中,应用程序仍然可以更改单元格的内容。
tm = new javax.swing.table.DefaultTableModel() { public Class> getColumnClass(int column) { switch(column) { case 0: return String.class; case 1: return String.class; case 2: return String.class; case 3: return String.class; case 4: return String.class; case 5: return String.class; case 6: return String.class; case 7: return String.class; case 8: return String.class; case 9: return String.class; case 10: return String.class; case 11: return Boolean.class; default: return String.class; } } @Override public boolean isCellEditable(int row, int column) { /* Set the 11th column as editable and rest non- editable */ if(column==11){ return true; }else{ //all other columns to false return false; } } }; table = new javax.swing.JTable(tm);
在netbeans上,您可以右键单击表格并单击表格内容,然后转到列选项卡并取消选中“可编辑”复选框。 问候!!
我知道我迟到但希望有人能够利用这一点。 您可以像这样简单地添加鼠标监听器:
jtable.addMouseListener( new MouseAdapter () { @Override public void mouseClicked ( MouseEvent e ) { columnIndex = replacedAssets.getSelectedColumn (); System.out.println ( "Double click on jtable" ); if ( columnIndex == 1 || columnIndex == 2 ) { JOptionPane.showMessageDialog ( parent , "Editing this Field may cause error in the data." , "Error Edit Not Permitted For This Field" , JOptionPane.ERROR_MESSAGE ); } } });
此代码阻止编辑索引1和2的列,您可以删除if条件以使其适用于所有列。