创建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
始终返回从中假的。这将会产生一个不可编辑的JTabel。
嗨,我是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);
享受这对我来说很好。我所要做的就是帮助你们,因为我得到了很多帮助。
这些都是相同的方式。第二个代码片段只包含较少不相关的代码,这使得它更好地作为答案。 – 2016-10-17 00:12:54
@MicahStairs在执行过程中第一个更好,因为该类将很容易编译,而第二个是需要更多时间的重写,但通过开发人员的设计视图,第二个是更易于维护的代码; – 2017-03-25 09:49:19
myTable.setDefaultEditor(Object.class, null);
也许你可以解释这个作品并列举缺点?它的语义似乎不同于以前的答案 - 即。你正在设置一个空编辑器。也许这比较慢,因为断言表是否可编辑需要更长的代码路径? – 2016-05-01 20:11:57
这是我正在寻找的简单答案。可能不是最好的表现,但它的简单性是值得的。 – Cristian 2018-03-04 15:01:50
你有没有简单tryed:
JTable table = new JTable();
table.setEnabled(false);
关于JComponent.setEnabled(boolean)它sayes:
设置组件是否被启用。启用的组件可能会响应用户输入,而未启用的组件无法响应用户输入。某些组件在禁用时可能会改变其视觉表示,以便向用户提供他们无法输入的反馈。
当涉及到JTable它似乎没有给任何视觉反馈。随着仍然能够点击列标题的振作。在我的实现中,应用程序仍然可以更改单元格的内容。
糟糕。刚刚看到用户Siddhu在这里提供了相同的解决方案:http://stackoverflow.com/questions/1990817/how-to-make-a-jtable-non-editable?noredirect=1&lq=1。不知道如果我应该在这里删除它或离开它,因为我不知道哪个问题可能被删除为重复。对不起,这里有个小菜一碟:o – brat 2017-05-20 02:04:09
问题在于,用户无法看到是否有任何行或单元格被选中,即使他点击了它。我发现使用'setDefaultEditor()'比这更好,因为当用户选择任何行或单元格时,它提供了一个视觉反馈。 – anotherGatsby 2017-12-07 18:45:00
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);
请[编辑](https://stackoverflow.com/posts/49110309/edit)你的答案解释为什么这段代码回答这个问题。 – 2018-03-05 12:33:26
- 1. 编辑jtable的用户信息
- 2. 在NSTextView中禁用编辑
- 3. 如何让用户在JTable中编辑单行?
- 4. 禁用用户配置文件编辑?
- 5. 编辑JTable行
- 6. 在Django中编辑用户
- 7. 在JTable编辑事件后
- 8. 在gerrit中禁用编辑功能
- 9. 在编辑器中禁用约束 - >
- 10. 如何在可编辑框中禁用%
- 11. JTable编辑模式
- 12. 编辑Jtable属性
- 13. JTable中禁用列选择
- 14. 在JTable中编辑时锁定整行
- 15. 禁用列表框编辑
- 16. 禁用MFMailComposeViewController上的编辑
- 17. TinyMCE编辑器禁用
- 18. 在JTable中禁用单个列拖动
- 19. 使用java DefaultCellEditor在JTable中获取正确的编辑行为
- 20. 编辑localStorage用户?
- 21. Laravel用户编辑
- 22. 在编辑期间禁用UITableView滚动
- 23. 禁用Joomla 3中的前端编辑
- 24. JTable单元编辑器bug
- 25. 使jtable不可编辑
- 26. 无法编辑JTable单元
- 27. 从RestulSet编辑JTable表
- 28. 如何编辑JTable行?
- 29. 如何在用户编辑表单中禁用个人联系表单选项?
- 30. 编辑框:禁用用户格式,但添加我自己
请参阅[*如何使用表*](http://docs.oracle.com/javase/tutorial/uiswing/components/table.html)。 – trashgod 2012-03-29 05:06:38