禁用JTable中的用户编辑

时间:2012-03-29 04:49:46

标签: java swing jtable edit

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

8 个答案:

答案 0 :(得分:42)

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

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

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

基本上我们在这里做的是覆盖isCellEditable并始终从中返回false。这将是一个非编辑JTabel。

答案 1 :(得分:39)

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

答案 2 :(得分:15)

myTable.setDefaultEditor(Object.class, null);

答案 3 :(得分:4)

你好我在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);

享受这对我来说很有用。我想做的就是帮助你们,因为我早就得到了帮助。

答案 4 :(得分:4)

你有没有尝试过:

JTable table = new JTable();
table.setEnabled(false);

关于JComponent.setEnabled(boolean)它说:

  

设置是否启用此组件。启用的组件可能会响应用户输入,而未启用的组件则无法响应用户输入。某些组件在被禁用时可能会改变其可视化表示,以便向用户提供他们无法接受输入的反馈。

说到JTable,似乎根本没有提供任何视觉反馈。凭借仍然能够点击列标题的优势。在我的实现中,应用程序仍然可以更改单元格的内容。

答案 5 :(得分:0)

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

在此方法“isCellEditable”中,我们可以启用和禁用特定列的用户编辑。在这种情况下,启用column = 11并禁用列的其余部分

答案 6 :(得分:0)

在netbeans上,您可以右键单击表并单击表内容,然后转到“列”选项卡,然后取消选中“可编辑”复选框。问候!

答案 7 :(得分:0)

我知道我来晚了,但希望有人能使用它。您可以像这样简单地添加鼠标侦听器:

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条件以使其适用于所有列。