Pessoal,
Alguém teria um exemplo de como colocar um JComboBox em uma linha da JTable?
Com isso o usuário poderia selecionar o registro na própria table sem ter que chamar outra tela para tal.
[]'s
Pessoal,
Alguém teria um exemplo de como colocar um JComboBox em uma linha da JTable?
Com isso o usuário poderia selecionar o registro na própria table sem ter que chamar outra tela para tal.
[]'s
Vé se isso resolve teu problema.
JTable table = new JTable();
DefaultTableModel model = (DefaultTableModel)table.getModel();
// Add some columns
model.addColumn("A", new Object[]{"item1"});
model.addColumn("B", new Object[]{"item2"});
// These are the combobox values
String[] values = new String[]{"item1", "item2", "item3"};
// Set the combobox editor on the 1st visible column
int vColIndex = 0;
TableColumn col = table.getColumnModel().getColumn(vColIndex);
col.setCellEditor(new MyComboBoxEditor(values));
// If the cell should appear like a combobox in its
// non-editing state, also set the combobox renderer
col.setCellRenderer(new MyComboBoxRenderer(values));
public class MyComboBoxRenderer extends JComboBox implements TableCellRenderer {
public MyComboBoxRenderer(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 MyComboBoxEditor extends DefaultCellEditor {
public MyComboBoxEditor(String[] items) {
super(new JComboBox(items));
}
}
URL:
http://exampledepot.com/egs/javax.swing.table/ComboBox.html
Bom exemplo, mas gostaria de saber como fazer para popular o objeto String[] com dados do banco!!!
ResultSet rs = st.executeQuery("select item ...");
rs.last();
String[] values = new String[rs.getRow()];
rs.first();
while (rs.next()) {
values[rs.getRow()-1] = rs.getString("item");
}
Muito bom! Obrigado helviojunior!
Funcionou direitinho aqui pra mim. Mas agora tem outra:
-Como vou fazer para usar um setselecteditem diferente para cada linha da tabela?
Porque se eu usar na MyComboBoxRenderer vai ficar selecionado o MESMO item no combo para todos os registros da tabela e no meu caso eles terão de ser diferentes.
Neste exemplo como faço para disparar um ação dado um valor selecionado no combobox ?
Consegui adcionar o evento assim:
MyComboBoxRenderer cb= new MyComboBoxRenderer(values);
int vColIndex = 0;
TableColumn col = table.getColumnModel().getColumn(vColIndex);
col.setCellRenderer(cb);
col.setCellEditor(new MyComboBoxEditor(dataColumn));
ItemListener itemListenerComboBox = new ItemListener()
{
public void itemStateChanged(ItemEvent evt)
{
if (evt.getStateChange() == ItemEvent.SELECTED)
{
String item = evt.getItem().toString();
//faz alguma coisa
}
}
};
cb.addItemListener(itemListenerComboBox);
No exemplo dado, o combobox é adiconado a todas as colunas da coluna zero…
Como seria para adcionar apenas a uma linha especificada ? por exemplo apenas a ultima linha…
Alguem pode ajudar ?
Viny ?
Como faço para retirar o combobox da linha da tabela, após o evento de seleção do combobox ?
Helpe-me …
Pleassseeeee…