Estou começando agora em Java e estou com dificuldades na estrutura de como as coisas funcionam.
Estou trabalhando em cima de um applet rodando que possui uma JTable que faz uma listagem de arquivos em que apenas um campo é editável. Trata-se de um JComboBox que lista objetos da classe TipoDocumento que eu criei. Então, o usuário vai adicionar arquivos nessa JTable e selecionar o TipoDocumento para cada arquivo.
Não estou compreendendo como fazer funcionar esse JComboBox. Já consegui colocar o Combo como editor da coluna certa, porém não consigo associar o valor escolhido à linha da tabela.
Vc precisa usar as classes TableCellEditor. Não tenho certeza, mas se você inserir um array dentro de uma célula a JTable “entende” automaticamente que essa célula usa um JComboBox como editor.
/**
* The ListCellEditor is a TableCellEditor that allows the user to select one of
* the values contained in a object list. The list must be created at the editor
* construction.
*/
public class ListCellEditor<T> extends AbstractCellEditor implements
TableCellEditor
{
private JComboBox editor;
public ListCellEditor(List<T> contents, boolean allowNull)
{
init(contents.toArray(), allowNull);
}
public ListCellEditor(T[] contents, boolean allowNull)
{
init(contents, allowNull);
}
public ListCellEditor(List<T> contents)
{
init(contents.toArray(), false);
}
public ListCellEditor(T[] contents)
{
init(contents, false);
}
private void init(Object[] contents, boolean allowNull)
{
editor = contents == null ? new JComboBox() : new JComboBox(contents);
if (allowNull)
((DefaultComboBoxModel) editor.getModel()).insertElementAt(null, 0);
editor.setEditable(false);
editor.putClientProperty("JComboBox.isTableCellEditor", Boolean.TRUE);
editor.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
fireEditingStopped();
}
});
}
public Component getTableCellEditorComponent(JTable table, Object value,
boolean isSelected, int row, int column)
{
if (value == null)
editor.setSelectedIndex(0);
else
editor.setSelectedItem(value);
return editor;
}
@SuppressWarnings("unchecked")
public T getCellEditorValue()
{
return (T) editor.getSelectedItem();
}
}