Boa tarde a todos!
Eu estou com o seguinte dilema, preciso arranjar um jeito de pegar o valor em uma coluna, porém não estou conseguindo obter o valor certo.
O código que eu uso para montar a tabela:
Object[][] informacaoColuna = new Object[this.modulo.getUsuarios().size()][2];
for (int i = 0; i < this.modulo.getUsuarios().size(); i++) {
informacaoColuna[i][0] = this.modulo.getUsuarios().get(i).getUsername();
int selecaoRadio;
if (this.modulo.getUsuarios().get(i).isAtualizaModelo() == true) {
selecaoRadio = 0;
} else {
selecaoRadio = 1;
}
informacaoColuna[i][1] = selecaoRadio;
}
Object[] informacaoCabecalho = {TEXTO_COLUNA_USUÁRIO, TEXTO_COLUNA_ATUALIZA_MODELO};
this.modeloTabelaAdministradores.setDataVector(informacaoColuna,informacaoCabecalho);
this.tabelaAdministradores.setModel(modeloTabelaAdministradores);
String[] valores = {"Sim", "Não"};
this.tabelaAdministradores.getColumn(TEXTO_COLUNA_ATUALIZA_MODELO).setCellRenderer(new RadioRenderer(valores));
this.tabelaAdministradores.getColumn(TEXTO_COLUNA_ATUALIZA_MODELO).setCellEditor(new RadioEditor(new JCheckBox(),new RadioPanel(valores)));
this.tabelaAdministradores.getColumn(TEXTO_COLUNA_USUÁRIO).setCellEditor(new DefaultCellEditor(colunaUsuario));
O Renderer:
private class RadioRenderer extends RadioPanel implements TableCellRenderer {
private static final long serialVersionUID = 1L;
public RadioRenderer(String[] strs) {
super(strs);
}
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
if (value instanceof Integer) {
setSelectedIndex(((Integer)value).intValue());
}
return this;
}
}
Meu Panel:
private class RadioPanel extends JPanel {
private static final long serialVersionUID = 1L;
private JRadioButton[] buttons;
public RadioPanel(String[] str) {
setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
buttons = new JRadioButton[str.length];
for (int i = 0; i < buttons.length; i++) {
buttons[i] = new JRadioButton(str[i]);
add(buttons[i]);
}
}
public void setSelectedIndex(int index) {
for (int i = 0; i < buttons.length; i++) {
buttons[i].setSelected(i == index);
}
}
public int getSelectedIndex() {
for (int i = 0; i < buttons.length; i++) {
if (buttons[i].isSelected()) {
return i;
}
}
return 1;
}
public JRadioButton[] getButtons() {
return buttons;
}
}
e por fim, meu Editor:
private class RadioEditor extends DefaultCellEditor implements ItemListener {
private static final long serialVersionUID = 1L;
private RadioPanel panel;
public RadioEditor(JCheckBox checkBox,RadioPanel panel) {
super(checkBox);
this.panel = panel;
ButtonGroup buttonGroup = new ButtonGroup();
JRadioButton[] buttons = panel.getButtons();
for (int i=0; i < buttons.length; i++) {
buttonGroup.add(buttons[i]);
buttons[i].addItemListener(this);
}
}
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
if (value instanceof Integer) {
panel.setSelectedIndex(1);
}
return panel;
}
public Object getCellEditorValue() {
return new Integer(panel.getSelectedIndex());
}
public void itemStateChanged(ItemEvent e) {
System.out.println(e.getSource());
}
}
Obrigado.
Felipe.