でレンダリングされた列がありJComboBox
、 内の各タイプの選択されたアイテムの量を示すラベルがありJComboBox
ます。
ItemListener
問題は、行ごとに異なるトリガーをしたいということです。
これで、すべてのセルがレンダリングされた列がありますJComboBox
が、すべてが同じようにトリガーされるのはItemListener
なぜですか??
これは私を緊張させています。
これが私のコードです:
listaPessoasModel = new DefaultTableModel(dadosPessoasTableColumn, 0);
listaPessoasTable = new JTable(listaPessoasModel);
listaPessoasTable.addKeyListener(newLineTableListener);
listaPessoasTable.setFillsViewportHeight(true);
JScrollPane scrollPane = new JScrollPane(listaPessoasTable);
scrollPane.setBounds(205, 344, 385, 169);
TableColumn classeColumn = listaPessoasTable.getColumnModel().getColumn(2);
classeColumn.setCellRenderer(new ClasseTableCellRender());
classeComboBox = new JComboBox<Classe>(new Vector<Classe>(Classe.allInstances()));
classeComboBox.setSelectedIndex(-1);
classeColumn.setCellEditor(new DefaultCellEditor(classeComboBox));
classeComboBox.setRenderer(classeComboBoxRenderer);
classeComboBox.addItemListener(new classeComboBoxItemListener());
そして、ここにすべてのリスナーとモデルがあります:
private final class classeComboBoxItemListener implements ItemListener {
@Override
public void itemStateChanged(ItemEvent e) {
Classe object = (Classe) e.getItem();
System.out.println("ItemListener , objecto -> " + object);
if(object != null && !newItemClasseComboControl){
if(e.getStateChange() == ItemEvent.SELECTED)
updateLabelLugares(false, object);
if(e.getStateChange() == ItemEvent.DESELECTED)
updateLabelLugares(true, object);
}
}
}
static class ClasseTableCellRender extends DefaultTableCellRenderer {
private static final long serialVersionUID = 1L;
public ClasseTableCellRender() { super(); }
public void setValue(Object value) {
if(value instanceof Classe)
setText((value == null) ? "" : ((Classe) value).tipo().toString());
else
setText((value == null) ? "" : value.toString());
}
}
private ListCellRenderer<Object> classeComboBoxRenderer = new DefaultListCellRenderer() {
private static final long serialVersionUID = 1L;
@Override
public Component getListCellRendererComponent(JList<?> list,
Object value,
int index,
boolean isSelected,
boolean cellHasFocus) {
Classe classe = (Classe) value;
if(value != null)
value = classe.tipo().toString();
return super.getListCellRendererComponent(list, value,
index, isSelected, cellHasFocus);
}
};
上のスクリーンショットは、私が探しているものを示しています。
これはまだ機能していないため、数字は単にアイデアを表すためのものです。項目リスナーを行ごとに個別に動作させることができません。
クリックして ComboBox を開くと、以前に選択されていた項目の選択が解除されるためです。
項目リスナーは、jcombobox 内の項目選択時にのみトリガーし、その列のセルごとに個別にトリガーして、ラベルを正しく更新できるようにします。