当创建JTable组件时,默认情况下启用单元格编辑。我应该如何防止用户编辑JTable的内容?
您可以使用以下代码创建一个JTable:
JTable jTable = new JTable() {
private static final long serialVersionUID = 1L;
public boolean isCellEditable(int row, int column) {
return false;
};
};
我们在这里的基本做法是重写isCellEditable
方法,并始终从中返回false。 这将使JTabel不可编辑。
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());
myTable.setDefaultEditor(Object.class, null);
你尝试过简单地:
JTable table = new JTable();
table.setEnabled(false);
关于JComponent.setEnabled(boolean),它的说明如下:
设置此组件是否启用。已启用的组件可以响应用户输入,而未启用的组件无法响应用户输入。某些组件在禁用时可能会更改其视觉表示,以向用户提供反馈,表明它们无法接受输入。
但是对于 JTable 组件似乎没有任何视觉反馈。尽管如此,您仍然可以点击列标题,并且在我的实现中,应用程序仍然可以更改单元格的内容。
setDefaultEditor()
比这更好,因为它在用户选择任何行或单元格时提供了视觉反馈。 - anotherGatsby您好,我经常从事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);
我非常喜欢这东西,它对我来说很好用。我想做的就是帮助你们,因为我之前得到了很多帮助。
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);
我知道我来晚了,但希望有人能够使用这个。您可以像这样简单地添加鼠标监听器:
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 );
}
}
});