2014-02-17 3 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: Вы должны использовать TableCellEditor и TableCellRenderer, если вы хотите, чтобы отобразить флажок в последней ячейке столбца и в TableCellEditor вам нужно обработать ItemListener для флажка.

2

1) JTable индексы столбцов начинаются с 0, если вы хотите установить JCheckBox в последний столбец, вам нужно использовать индекс 4, а не 5, как в вашем коде.

2) Для добавления действия в вашей JCheckBox колонке вы можете использовать DefaultCellEditor с JCheckBox, например:

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 deasn't для меня, JScrollPane, показывающий все, что угодно ???, – mKorbel

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