2012-05-22 5 views
0

버튼을 JTable에 추가하고 싶습니다. ...
SupplierForm.java JTable에 버튼 추가하기 - Netbeans

public class SupplierForm extends javax.swing.JFrame { 

    /** 
    * Creates new form SupplierForm 
    */ 
    public SupplierForm() { 
     initComponents(); 
    } 

    /** 
    * This method is called from within the constructor to initialize the form. 
    * WARNING: Do NOT modify this code. The content of this method is always 
    * regenerated by the Form Editor. 
    */ 
    @SuppressWarnings("unchecked") 
    // <editor-fold defaultstate="collapsed" desc="Generated Code"> 
    private void initComponents() { 

     jPanel1 = new javax.swing.JPanel(); 
     supplierCombo = new javax.swing.JComboBox(); 
     jScrollPane1 = new javax.swing.JScrollPane(); 
     dataTable = new javax.swing.JTable(); 

     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

     jPanel1.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED)); 

     supplierCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "USER", "Item 3", "Item 4" })); 
     supplierCombo.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       supplierComboActionPerformed(evt); 
      } 
     }); 

     dataTable.setModel(new javax.swing.table.DefaultTableModel(
      new Object [][] { 

      }, 
      new String [] { 
       "ID", "Title 2", "Title 3", "Title 4" 
      } 
     )); 
     /*This is giving error 
     dataTable.getColumn("Button").setCellRenderer(new ButtonRenderer()); 
     dataTable.getColumn("Button").setCellEditor(
      new ButtonEditor(new JCheckBox()));*/ 
     jScrollPane1.setViewportView(dataTable); 

     javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); 
     jPanel1.setLayout(jPanel1Layout); 
     jPanel1Layout.setHorizontalGroup(
      jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(jPanel1Layout.createSequentialGroup() 
       .addGap(173, 173, 173) 
       .addComponent(supplierCombo, javax.swing.GroupLayout.PREFERRED_SIZE, 141, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addContainerGap()) 
      .addGroup(jPanel1Layout.createSequentialGroup() 
       .addGap(20, 20, 20) 
       .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 660, Short.MAX_VALUE) 
       .addGap(89, 89, 89)) 
     ); 
     jPanel1Layout.setVerticalGroup(
      jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(jPanel1Layout.createSequentialGroup() 
       .addContainerGap() 
       .addComponent(supplierCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) 
       .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
     ); 

     javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
     getContentPane().setLayout(layout); 
     layout.setHorizontalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() 
       .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
       .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addGap(34, 34, 34)) 
     ); 
     layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addGap(26, 26, 26) 
       .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
     ); 

     pack(); 
    }// </editor-fold> 

    private void supplierComboActionPerformed(java.awt.event.ActionEvent evt) {            
     // TODO add your handling code here: 

     String tableName = (String) supplierCombo.getModel().getSelectedItem(); 
     DefaultTableModel model = (DefaultTableModel) dataTable.getModel(); 
     int c = model.getRowCount(); 
     for (int i=c-1; i>=0; i--){ 
      model.removeRow(i); 
      dataTable.revalidate(); 
      } 
     String sql = "select * from "+ tableName+" "; 
     try { 
      try { 
       Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
      } catch (ClassNotFoundException ex) { 
       Logger.getLogger(SupplierForm.class.getName()).log(Level.SEVERE, null, ex); 
      } 
      Connection connect = (Connection) DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\\Merlin1.accdb"); 
      Statement statmnt = connect.createStatement(); 
      ResultSet rslt = statmnt.executeQuery(sql); 
      while(rslt.next()){ 
       String id = rslt.getString("ID"); 
       String name = rslt.getString("USER_NAME"); 
       String surname = rslt.getString("PASSWORD"); 
       //String age = rslt.getString("Age"); 
       model.addRow(new Object[]{id,name,surname}); 

      } 

     } catch(SQLException e){ 
      JOptionPane.showMessageDialog(this,"No Supplier exists with this name"); 

      } 
    // dataTable.revalidate(); 

    }            

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String args[]) { 
     /* 
     * Set the Nimbus look and feel 
     */ 
     //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> 
     /* 
     * If Nimbus (introduced in Java SE 6) is not available, stay with the 
     * default look and feel. For details see 
     * http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
     */ 
     try { 
      for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { 
       if ("Nimbus".equals(info.getName())) { 
        javax.swing.UIManager.setLookAndFeel(info.getClassName()); 
        break; 
       } 
      } 
     } catch (ClassNotFoundException ex) { 
      java.util.logging.Logger.getLogger(SupplierForm.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (InstantiationException ex) { 
      java.util.logging.Logger.getLogger(SupplierForm.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (IllegalAccessException ex) { 
      java.util.logging.Logger.getLogger(SupplierForm.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (javax.swing.UnsupportedLookAndFeelException ex) { 
      java.util.logging.Logger.getLogger(SupplierForm.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } 
     //</editor-fold> 

     /* 
     * Create and display the form 
     */ 
     java.awt.EventQueue.invokeLater(new Runnable() { 

      public void run() { 
       new SupplierForm().setVisible(true); 
      } 
     }); 
    } 
    // Variables declaration - do not modify 
    private javax.swing.JTable dataTable; 
    private javax.swing.JPanel jPanel1; 
    private javax.swing.JScrollPane jScrollPane1; 
    private javax.swing.JComboBox supplierCombo; 
    // End of variables declaration 
} 


ButtonEditor.java

을 나는 그것의 렌더러 및 cellEditor가 클래스를 만들었하지만, 넷빈즈에/내 코드에 버튼을 배치 할 위치를 난 그냥 알아낼 수 없습니다

class ButtonEditor extends DefaultCellEditor { 
    protected JButton button; 

    private String label; 

    private boolean isPushed; 

    public ButtonEditor(JCheckBox checkBox) { 
    super(checkBox); 
    button = new JButton(); 
    button.setOpaque(true); 
    button.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
     fireEditingStopped(); 
     } 
    }); 
    } 

    public Component getTableCellEditorComponent(JTable dataTable, Object value, 
     boolean isSelected, int row, int column) { 
    if (isSelected) { 
     button.setForeground(dataTable.getSelectionForeground()); 
     button.setBackground(dataTable.getSelectionBackground()); 
    } else { 
     button.setForeground(dataTable.getForeground()); 
     button.setBackground(dataTable.getBackground()); 
    } 
    label = (value == null) ? "" : value.toString(); 
    button.setText(label); 
    isPushed = true; 
    return button; 
    } 

    public Object getCellEditorValue() { 
    if (isPushed) { 
     // 
     // 
     JOptionPane.showMessageDialog(button, label + ": Ouch!"); 
     // System.out.println(label + ": Ouch!"); 
    } 
    isPushed = false; 
    return new String(label); 
    } 

    public boolean stopCellEditing() { 
    isPushed = false; 
    return super.stopCellEditing(); 
    } 

    protected void fireEditingStopped() { 
    super.fireEditingStopped(); 
    } 
} 


ButtonRenderer.java

public class ButtonRenderer extends JButton implements TableCellRenderer{ 
    public ButtonRenderer() { 
    setOpaque(true); 
    } 

    public Component getTableCellRendererComponent(JTable dataTable, Object value, 
     boolean isSelected, boolean hasFocus, int row, int column) { 
    if (isSelected) { 
     setForeground(dataTable.getSelectionForeground()); 
     setBackground(dataTable.getSelectionBackground()); 
    } else { 
     setForeground(dataTable.getForeground()); 
     setBackground(UIManager.getColor("Button.background")); 
    } 
    setText((value == null) ? "" : value.toString()); 
    return this; 
    } 

} 

답변

1
  • , 작업이 내가 아닌 JRadioButtons (TableCellRendererJRadioButtons로 확인) JComboBoxTableCellEditor로 사용하고 RadioButtonGroup 예를 들어 fo를 너무 Buttons ComponentsJSpinner에 대한 TableCellRendererTableCellEditor을 만들 쉽지

  • 어쨌든 @camickr로 Table Button Column을 사용하십시오.

+0

실제로 쉬운 일이 아니기 때문에 ... Windows 양식 규칙 –