2014-02-17 64 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