2014-02-17 66 views
1

下面的代碼是我的項目類之一。它產生一個框架與JTable當我點擊查找按鈕時,一些數據將動態加載到表。最後一列表必須是帶有事件的複選框。 我想這個代碼複選框(把它從不工作的另一個project..its)JTable與可編輯複選框

DefaultTableModel dtm = new DefaultTableModel(data, colName){ 
     public Class getColumnClass(int c) { 
       return (c == 5? Boolean.class : String.class); 
      } 
     }; 

實際的類

public class BookReturnPanel { 
    JPanel retunBookPanel; 
    JTextField txtRegNo; 
    JButton btnFind, btnSave; 
JTable retunTable = null; 
    public JScrollPane jScrollPane = null; 
    private int i; 
    static Object[][] data; 
    String regNo = null; 
    Member member = null; 
    DefaultTableModel model = new DefaultTableModel(); 
    /** 
    * Create the panel. 
    */ 
    public BookReturnPanel() { 

    } 

    public JPanel getRetunBookPanel() { 
     if (retunBookPanel == null) { 
      retunBookPanel = new JPanel(); 
      retunBookPanel.setLayout(null); 

      model.addColumn("Member"); 
      model.addColumn("Book"); 
      model.addColumn("Issue Date"); 
      model.addColumn("Return Date"); 
      model.addColumn("Return"); 

      retunTable=new JTable(model); 
      retunTable.setLocation(new Point(0,60)); 
      retunTable.setSize(new Dimension(517, 386)); 

      JLabel lblRegNo = new JLabel("Member Reg No:"); 
      lblRegNo.setBounds(24, 40, 108, 14); 
      retunBookPanel.add(lblRegNo); 
      retunBookPanel.add(getJScrollPane(), BorderLayout.CENTER); 
      txtRegNo = new JTextField(); 
      txtRegNo.setBounds(129, 37, 200, 20); 
      retunBookPanel.add(txtRegNo); 
      txtRegNo.setColumns(10); 

      btnFind = new JButton("Find"); 
      btnFind.setBounds(359, 36, 91, 23); 
      btnFind.addActionListener(new ActionListener() { 

       @Override 
       public void actionPerformed(ActionEvent e) { 

        if (model.getRowCount() > 0) { 
         for (int i = model.getRowCount() - 1; i > -1; i--) { 
          model.removeRow(i); 
         } 
        } 

        regNo = txtRegNo.getText(); 
        member = ServiceFactory.getMemberServiceImpl().findByregNo(regNo); 


        List<Issue> issues = ServiceFactory.getIssueServiceImpl() 
          .FindAllIssueByMemberId(member.getSerialNo()); 



        for(Issue issue:issues){ 
         Vector<Object>row=new Vector<Object>(); 

         row.addElement(issue.getMemberId().getName()); 
         row.addElement(issue.getBookId().getName()); 
         row.addElement(issue.getIssueDate()); 
         row.addElement(issue.getReturnDate()); 
         row.addElement(issue.getStatus()); 

         model.addRow(row); 

        } 


       } 
      }); 
      retunBookPanel.add(btnFind); 

      btnSave = new JButton("Save"); 
      btnSave.setBounds(425, 448, 91, 23); 
      retunBookPanel.add(btnSave); 

     } 
     return retunBookPanel; 

    } 

    private JScrollPane getJScrollPane() { 

     if (jScrollPane == null) { 
      jScrollPane = new JScrollPane(); 
      jScrollPane.setBounds(new Rectangle(0, 60, 517, 386)); 


      jScrollPane.setViewportView(retunTable); 
     } 
     return jScrollPane; 
    } 
} 

上面的代碼產生JTable完美,但我需要顯示JCheckbox在最後一列。 也需要點擊複選框時添加事件..!

回答

1

@ user3318622:您需要使用TableCellEditorTableCellRenderer如果你想在最後一列單元格中顯示覆選框,並在TableCellEditor你需要處理ItemListener的複選框。

2

1)JTable列索引從0開始,如果要將JCheckBox設置爲最後一列,則需要使用索引4,而不是像代碼中那樣使用索引5。

2)添加動作你JCheckBox列,您可以使用DefaultCellEditorJCheckBox,例如:

JCheckBox chb = new JCheckBox(); 
chb.addItemListener(new ItemListener() { 

    @Override 
    public void itemStateChanged(ItemEvent e) { 
      System.out.println("action"); 
    } 
}); 
DefaultCellEditor editor = new DefaultCellEditor(chb) { 
    @Override 
    public Component getTableCellEditorComponent(JTable table,Object value, boolean isSelected, int row,int column) { 
      Component tableCellEditorComponent = super.getTableCellEditorComponent(table, value, isSelected, row, column); 
      ((JCheckBox)tableCellEditorComponent).setHorizontalAlignment(JCheckBox.CENTER); 
      return tableCellEditorComponent; 
    } 
}; 
retunTable.getColumnModel().getColumn(4).setCellEditor(editor); 
+0

的getColumnClass與JTable中已添加到GUI – mKorbel

+0

@mKorbel,你是什麼意思? – alex2410

+0

OPs code deasn't match for me,JScrollPane showing what ???, – mKorbel