2013-05-28 5 views
2

Я знаю, что на это был дан ответ прежде, но, учитывая, что я все еще новичок, я не могу определить способ дать действия и заблокировать редактирование ячейки, я пробовал это в нескольких способы, я могу успешно отображать кнопки, но когда я нажимаю на него, он редактирует ячейку, а не нажимает кнопку. Я знаю, что, чтобы избежать редактирования ячейки, я должен создать абстрактную таблицу и использовать этот метод:Как добавить кнопки внутри ячейки jtable и дать ей действие

public boolean isCellEditable(int row, int col) { 
     //Note that the data/cell address is constant, 
     //no matter where the cell appears onscreen. 
     if (col < 3) { 
      return false; 
     } else { 
      return true; 
     } 
    } 

однако им, используя по умолчанию JTable а, так это код, я использую для панели и визуализации ячейки:

class PlusMinusCellRenderer extends JPanel implements TableCellRenderer { 

    public Component getTableCellRendererComponent(
         final JTable table, Object value, 
         boolean isSelected, boolean hasFocus, 
         int row, int column) { 


      if(column < 3) 
      { 
      JLabel campo = new JLabel(value.toString()); 


      this.add(campo); 

      } 
      if(column > 2) 
      { 

       //this is a button 
       this.add(botaoteste); 





      materialtable.revalidate(); 
      materialtable.repaint(); 


      } 
      return this; 

    } 

и это код, я использую для извлечения данных из SQL в JTable (я настроил код DefaultJTable)

String[] columnNames={"teste","abc","def"};     
    Object[][] data = new Object[1][4]; 
      if(createConnection()) 
      { 
       try { 
        Statement statemt = conLogin.createStatement(); 
        ResultSet rs = statemt.executeQuery("SELECT * FROM Materiais"); 
        //ResultSet rs = statemt.executeQuery("SELECT * FROM Materiais"); 
        rsmtdata = rs.getMetaData(); 

        //int columns = rsmtdata.getColumnCount(); 
        columnNames = new String[]{rsmtdata.getColumnName(1),rsmtdata.getColumnName(2),rsmtdata.getColumnName(3),"Deletar"}; 
        if(rs.next()) 
        { 
         data[0][0] = rs.getString(1); 
         data[0][1] = rs.getString(2); 
         data[0][2] = rs.getString(3); 
         data[0][3] = new Boolean(false); 
        } 
        while (rs.next()) 
        { 

         Object[][] temp = new Object[data.length+1][4]; 
         for(int i=0;i < data.length;i++) 
         { 
          for(int j = 0;j < 4;j++) 
          { 
           temp[i][j] = data[i][j]; 
          } 

         } 
         temp[data.length][0] = rs.getString(1); 
         temp[data.length][1] = rs.getString(2); 
         temp[data.length][2] = rs.getString(3); 
         temp[data.length][3] = new Boolean(false); 
         data = temp; 



        } 
materialtable = new javax.swing.JTable(data, columnNames); 
materialtable = new javax.swing.JTable(data, columnNames){ 
      public TableCellRenderer getCellRenderer(int row, int column) { 
       return new PlusMinusCellRenderer(); 
      } 
     }; 

materialtable.setRowHeight(32); 

       } catch (SQLException ex) { 
        Logger.getLogger(ProfessorForm.class.getName()).log(Level.SEVERE, null, ex); 
       } 

       } 

//Create the scroll pane and add the table to it. 
materialtable.setBackground(new java.awt.Color(153, 255, 51)); 

materialtable.setSelectionBackground(new java.awt.Color(255, 255, 51)); 

materialtable.setSelectionForeground(new java.awt.Color(255, 102, 0)); 



jScrollPane3.setViewportView(materialtable); 

так, чтобы сделать кнопку внутри таблицы я на основе этой теме: Adding Buttons inside cell of JTable along with data?

Мой вопрос очень прямолинейный, как я могу отключить редактирование строк (как и использование метода isCellEditable()) и дать действие кнопкам? любая помощь здесь очень ценится и, пожалуйста, примите ее к рассмотрению im все еще новичок, поэтому, пожалуйста, подробная информация или образцы необходимы! С наилучшими пожеланиями, Ромуло Romero

+0

Для [example] (http://stackoverflow.com/a/5559747/230513) вам нужен _both_ визуализатор _and_ и редактор. – trashgod

+0

Вам кажется, что вы переопределите метод 'getCellRenderer' вашего' JTable', так почему бы не 'isCellEditable'? – Arend

+0

Wow dude nice reference, спасибо большое за помощь, которая действительно сделала работу, теперь у меня есть таблица с кнопками и кнопками триггерных действий: D еще раз спасибо, я очень ценю это !!! всего наилучшего, – Ogre3dUser

ответ

2

Вам нужно как рендерер и и редактора, как показано в этом example. См. Как использовать таблицы: Редакторы и рендеринги для details. Тангенциально вы должны переопределить метод isCellEditable() в своем TableModel, а не в расширении JTable.