Kliknięcie JButton w JTable
Oto zrzut ekranu z tym, co chcę zrobić:
To, co się dzieje, pokazuje prawidłowo JButton, ale po kliknięciu nic się nie dzieje. Po przeszukaniu odkryłem, żeObject
wrócił przeztable.getValueAt()
jest łańcuchem zamiast JButtonem ...
Oto kod:
<code>tblResult = new JTable(data,cols) { public TableCellRenderer getCellRenderer( int row, int column ) { return new ClientsTableRenderer(); } }; </code>
Używam tego do wypełniania JTable w czasie wykonywania: (tblResult
jest terazClients.rblResult
)
<code>SwingUtilities.invokeLater( new Runnable() { public void run() { DefaultTableModel aModel = new DefaultTableModel() { //setting the jtable read only @Override public boolean isCellEditable(int row, int column) { return false; } }; String[] cols = {"N°","Société", "TVA", "CP", "Ville", ""}; aModel.setColumnIdentifiers(cols); Object[] temp = new Object[6]; for(int i=0;i<result.length;i++) { temp[0] = result[i].custNumber; temp[1] = result[i].name; temp[2] = result[i].tva; temp[3] = result[i].cp; temp[4] = result[i].city; temp[5] = "Consulter"; aModel.addRow(temp); } Clients.tblResult.setModel(aModel); Clients.tblResult.addMouseListener(new JTableButtonMouseListener(Clients.tblResult)); }} ); </code>
TutajClientsTableRenderer
klasa
<code>public class ClientsTableRenderer extends JPanel implements TableCellRenderer { @Override public Component getTableCellRendererComponent( final JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { setBackground(Color.WHITE); if(column < 5) { JLabel label = new JLabel(value.toString()); JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER,0,9)); panel.setBackground(Color.WHITE); panel.add(label); this.add( panel); } else { JButton button = new JButton(value.toString()); button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { System.out.println("Clicked !"); } }); JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER,0,3)); panel.setBackground(Color.WHITE); panel.add(button); this.add(panel); } return this; } } </code>
I wreszcie JTableButtonMouseListener ():
<code>public class JTableButtonMouseListener extends MouseAdapter { private final JTable table; public JTableButtonMouseListener(JTable table) { this.table = table; } @Override public void mouseClicked(MouseEvent e) { int column = table.getColumnModel().getColumnIndexAtX(e.getX()); int row = e.getY()/table.getRowHeight(); System.out.println("Col :"+column + "row:"+row); if (row < table.getRowCount() && row >= 0 && column < table.getColumnCount() && column >= 0) { Object value = table.getValueAt(row, column); System.out.println("Value :"+value.getClass().getName()); if (value instanceof JButton) { ((JButton)value).doClick(); } } } } </code>
Jestem nowy w Javie, pomoc byłaby bardzo mile widziana :)
Z góry dziękuję !