Eai galera estou com um problema…criei uma Jtable com 2 colunas de checkbox. Gostaria de saber como eu faço para saber qdo o usuario clicou?
E também como eu faço para deixar a seleção apenas em um dos checkboxes por linha?
MyTableModel:
class MyTableModel extends AbstractTableModel implements TableCellRenderer {
private boolean DEBUG = false;
private boolean [] colsEdicao;
private String[] columnNames = null;
private Object[][] data = null;
public MyTableModel(String[] columnNames, Object[][] data, boolean [] edicao)
{
setLinhas(data);
setColunas(columnNames);
colsEdicao = edicao;
}
{
}
public int getColumnCount() {
return columnNames.length;
}
public int getRowCount() {
return data.length;
}
public String getColumnName(int col) {
return columnNames[col];
}
public Object getValueAt(int row, int col) {
return data[row][col];
}
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
public boolean isCellEditable(int row, int col) {
return colsEdicao[col];
}
public void setValueAt(Object value, int row, int col) {
if (DEBUG) {
System.out.println("Setting value at " + row + "," + col
+ " to " + value
+ " (an instance of "
+ value.getClass() + ")");
}
data[row][col] = value;
fireTableCellUpdated(row, col);
if (DEBUG) {
System.out.println("New value of data:");
printDebugData();
}
}
public void setColunas(String[] strings) {columnNames = strings;}
public void setLinhas(Object[][] dados) {data = dados;}
private void printDebugData() {
int numRows = getRowCount();
int numCols = getColumnCount();
for (int i=0; i < numRows; i++) {
System.out.print(" row " + i + ":");
for (int j=0; j < numCols; j++) {
System.out.print(" " + data[i][j]);
}
System.out.println();
}
System.out.println("--------------------------");
}
public Component getTableCellRendererComponent(JTable jTable, Object object, boolean b, boolean b0, int i, int i0)
{
JCheckBox check=new JCheckBox();
check.setSelected(new Boolean(data[i][i0].toString()));
return check;
}
}
Criando a JTable:
public JTable createTable() throws Exception
{
ArrayList lista = new ArrayList();
final String[] columnNames = {"Documento","Associar","Deletar"};
ArrayList lista2 = new ArrayList();
boolean [] edicao = {false,true,true};
.....
final Object[][] data = new Object[lista2.size()][tamanhodata];
int count=0;
for(int i=0;i<lista2.size();i++)
{
data[count][0]=lista2.get(i);
data[count][1]= new Boolean(false);
data[count][2]= new Boolean(false);
count++;
}
final MyTableModel m=new MyTableModel(columnNames,data,edicao);
final JTable jtable = new JTable(m);
jtable.setPreferredScrollableViewportSize(new Dimension(400, 60));
initColumnSizes(jtable);
jtable.addMouseListener(new MouseListener() {
public void mouseClicked(MouseEvent er) {
if (er.getClickCount() >= 0) {
if (er.getClickCount() >= 0)
{
int row = jtable.getSelectedRow();
int col = jtable.getSelectedColumn();
System.out.println((String) jtable.getValueAt(row,0));
System.out.println((String) jtable.getValueAt(row,col));
System.out.println((String) jtable.getValueAt(0,col));
}
}
}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mousePressed(MouseEvent e){}
public void mouseReleased(MouseEvent e){}
});
return jtable;
}
Quando eu clico no checkbox… dá o seguinte erro:
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.Boolean
at org.ktex.app.AppAssocia$1.mouseClicked(AppAssocia.java:392)
at java.awt.AWTEventMulticaster.mouseClicked(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)