Bom dia, galerinha do GUJ!
Tudo bem?
Estou com uma pequena dúvida:
Tenho minha JTable e tudo o mais. Porém, quero que, na primeira coluna, apareça uma JComboBox que contém uma coleção de dados que li do meu database. Quero que ela sempre apareça, não sendo necessário clicar sobre ela para aí sim aparecer.
Desde já, grato pela ajuda!
Fiquem com Deus, abraço!
t_java
Outubro 11, 2011, 10:40am
#2
Tente utilizar o TableCellRenderer, veja o exemplo abaixo.
public Janela() {
initComponents();
modelo = new ModeloTabela();
tabela.setModel(modelo);
String[] values = new String[]{"Vermelho", "Azul", "Amarelo", "Verde"};
TableColumn coluna = tabela.getColumnModel().getColumn(0);
JComboBox comboBox = new JComboBox(values);
coluna.setCellEditor(new DefaultCellEditor(comboBox));
coluna.setCellRenderer(new ComboBoxRenderer(values));
}
class ComboBoxRenderer extends JComboBox implements TableCellRenderer {
public ComboBoxRenderer(String[] items) {
super(items);
}
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
if (isSelected) {
setForeground(table.getSelectionForeground());
super.setBackground(table.getSelectionBackground());
} else {
setForeground(table.getForeground());
setBackground(table.getBackground());
}
// Select the current value
setSelectedItem(value);
return this;
}
}
public class LinhaModelo {
private String coluna1;
private String coluna2;
private String coluna3;
public LinhaModelo(String coluna1, String coluna2, String coluna3) {
this.coluna1 = coluna1;
this.coluna2 = coluna2;
this.coluna3 = coluna3;
}
/**
* @return the coluna1
*/
public String getColuna1() {
return coluna1;
}
/**
* @param coluna1 the coluna1 to set
*/
public void setColuna1(String coluna1) {
this.coluna1 = coluna1;
}
/**
* @return the coluna2
*/
public String getColuna2() {
return coluna2;
}
/**
* @param coluna2 the coluna2 to set
*/
public void setColuna2(String coluna2) {
this.coluna2 = coluna2;
}
/**
* @return the coluna3
*/
public String getColuna3() {
return coluna3;
}
/**
* @param coluna3 the coluna3 to set
*/
public void setColuna3(String coluna3) {
this.coluna3 = coluna3;
}
}
public class ModeloTabela extends AbstractTableModel {
private String[] colunas = {"Coluna1", "Coluna2","Coluna3"};
private ArrayList dados;
public ModeloTabela() {
super();
dados = new ArrayList();
dados.add(new LinhaModelo("Vermelho", "1", "1"));
dados.add(new LinhaModelo("Azul", "2", "2"));
dados.add(new LinhaModelo("Amarelo", "3", "3"));
dados.add(new LinhaModelo("Verde", "4", "4"));
}
@Override
public String getColumnName(int column) {
return colunas[column];
}
@Override
public int getRowCount() {
return dados.size();
}
@Override
public int getColumnCount() {
return colunas.length;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
LinhaModelo linha = (LinhaModelo) dados.get(rowIndex);
switch (columnIndex) {
case 0:
return linha.getColuna1();
case 1:
return linha.getColuna2();
case 2:
return linha.getColuna3();
}
return null;
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
if (columnIndex == 0) {
return true;
} else {
return false;
}
}
@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
if (columnIndex == 0) {
((LinhaModelo) dados.get(rowIndex)).setColuna1(aValue.toString());
}
}
}