禁用JTable中的用户编辑

Par*_*rag 27 java swing edit jtable

创建JTable组件时,默认情况下启用单元格编辑.如何阻止用户编辑JTable的内容?

Rah*_*kar 43

您可以使用以下代码创建JTable:

    JTable jTable = new JTable() {
        private static final long serialVersionUID = 1L;

        public boolean isCellEditable(int row, int column) {                
                return false;               
        };
    };
Run Code Online (Sandbox Code Playgroud)

基本上我们在这里做的是重写isCellEditable并始终从它返回错误.这将是一个非editabe JTabel.

  • 这应该是更好的答案.我在这里使用anon类时没有发现任何错误.Plus用户可能会在其他位置使用不同的`TableModel`.给予好评! (3认同)
  • +1 @instict因为这不影响表模型,在我看来这是一个更好的答案.还有问题:serialVersionUID真的有必要吗? (2认同)

小智 41

JTable使用AbstractTableModel对象.这是你传递给JTable的构造函数的东西.您可以按如下方式编写自己的AbstractTableModel

public class MyTableModel extends AbstractTableModel {

      public boolean isCellEditable(int row, int column){  
          return false;  
      }

}
Run Code Online (Sandbox Code Playgroud)

然后初始化你的JTable

JTable myTable = new JTable(new MyTableModel());
Run Code Online (Sandbox Code Playgroud)

  • 显然,简单地传递一个布尔值对于设计师来说并不够优雅...... (5认同)

Ari*_* G. 17

myTable.setDefaultEditor(Object.class, null);
Run Code Online (Sandbox Code Playgroud)

  • 也许你可以解释这个作品并列举一些缺点?看起来语义与之前的答案不同 - 即你正在设置一个空编辑器.也许这样做比较慢,因为断言表是否可编辑需要遵循更长的代码路径? (2认同)
  • 这是我一直在寻找的简单答案。可能不是最好的性能明智的,但它的简单性是值得的。 (2认同)

Moh*_*leb 5

嗨,我在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);
Run Code Online (Sandbox Code Playgroud)

我的另一种方法是创建表模型的实例。这是第二种方法:

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);
Run Code Online (Sandbox Code Playgroud)

享受这个对我来说很好。我想做的就是帮助大家,因为我早就得到了帮助。


bra*_*rat 5

您是否尝试过简单:

JTable table = new JTable();
table.setEnabled(false);
Run Code Online (Sandbox Code Playgroud)

关于JComponent.setEnabled(boolean)它说:

设置是否启用此组件。启用的组件可以响应用户输入,而未启用的组件不能响应用户输入。某些组件在禁用时可能会更改其视觉表示,以便向用户提供它们不能接受输入的反馈。

当涉及到JTable时,它似乎根本没有提供任何视觉反馈。仍然能够单击列标题的特权。在我的实现中,应用程序仍然可以更改单元格的内容。