2013-10-01 2 views
-2

У меня есть таблица, которая можно щелкнуть, но когда я дважды кликнул, вместо того, чтобы делать то, что сказано, это режим редактирования. Я пробовал метод isCellEditable() без успеха. Может быть, я что-то делаю неправильно?сделать Jtable нередактируемым

Вот код:

public AllResultsFromDB(GUI x) { 
    final Vector columnNames = new Vector(); 
    final Vector data = new Vector(); 


     for (int i = 1; i <= columns; i++) { 
      columnNames.addElement(metad.getColumnName(i)); 
     } 


     // This loop gets the data inside the rows 

     while (rset.next()) { 
      final Vector row = new Vector(columns); 


      for (int i = 1; i <= columns; i++) { 
       row.addElement(rset.getObject(i)); 

      } 

      data.addElement(row); 
      //data.addElement(b); 
     } 

     rset.close(); 
     stmt.close(); 
     connection.close(); 


     // Create table with results 

     final JTable table = new JTable(data, columnNames) { 


      public boolean isCellEditable() { 
          return false; 
         } 



      public Class getColumnClass(int column) { 

       for (int row = 0; row < getRowCount(); row++) { 


        Object obj = getValueAt(row, column); 




        if (obj != null) { 

         return obj.getClass(); 

        } 
       } 

       return Object.class; 
      } 


     }; 


     JScrollPane scroll = new JScrollPane(table); 
     getContentPane().add(scroll); 


     JPanel panel = new JPanel(); 
     getContentPane().add(panel, BorderLayout.SOUTH); 


     table.addMouseListener(new MouseListener() { 

      public void mousePressed(MouseEvent e) { 

       //System.out.println(table.getSelectedRow()); 

      } 

      public void mouseReleased(MouseEvent e) { 
       //System.out.println(table.getSelectedRow()); 

      } 

      public void mouseEntered(MouseEvent e) { 
       //System.out.println(table.getSelectedRow()); 

      } 

      public void mouseExited(MouseEvent e) { 
       //System.out.println(table.getSelectedRow()); 
      } 

      public void mouseClicked(MouseEvent e) { 

       if(e.getClickCount()==2){ 


       System.out.println(table.getSelectedRow()); 
      } 

      } 
     }); 
+0

Для более эффективной помощи, отправьте сообщение [SSCCE] (http://sscce.org/). –

ответ

2

Ты не так далеко.

Фактический метод isCellEditable принимает два параметра, поэтому ваш метод фактически не отменяет ничего.

См: http://docs.oracle.com/javase/7/docs/api/javax/swing/table/TableModel.html#isCellEditable%28int,%20int%29

для правильного метода.

+0

Это не помогает мне ... Я знаю, что это нужно int, но я не знаю, как это сделать! Посмотрите мой код и скажите мне, что нужно изменить! Я схожу с ума! – louboulos

+0

Что-нибудь? Пожалуйста? – louboulos

+0

Джек выложил то, что нужно. Все, что я могу сделать дальше, предлагает вам пройти через: http://docs.oracle.com/javase/tutorial/uiswing/components/table.html – BlackBox

3

Метод isCellEditable, что вы пытались переопределить имеет другую подпись, которая:

public boolean isCellEditable(int row, int column) 

Как вы могли бы указать, какую конкретную ячейку в противном случае? В следующий раз добавление аннотации @Override должно помочь определить это.

В любом случае это неправильный способ сделать JTable недоступным для редактирования. Правильный способ заключается в предоставлении настраиваемого AbstractTableModel, который возвращает false с помощью метода isCellEditable. JTable не должен определять, доступна ли ячейка для редактирования, это задача модели, чтобы решить ее: действительно, метод isCellEditable JTable просто запрашивает его модель, если ячейка редактируема. JTable показывает контент, не более того, это модель, которая решает и содержит данные.

Поскольку вы, как представляется, используете только основные функции JTable, вам не нужно откатывать собственную модель таблицы, для вас будет работать DefaultTableModel, и вы можете переопределить его метод isCellEditable.

+0

Не понимаю. Это выполнимо с моим кодом так, как сейчас? Если да, как вы это сделаете? Я не могу понять. – louboulos

+0

'public boolean isCellEditable (int row, int col) { return false; } ' Это ответ. Мне нужно было просто разместить это под началом стола! – louboulos

Смежные вопросы