Я использую JComboBox
в Jtable
ячейке. Когда я нажимаю JComboBox
и выбираю из него значение, оно вызывает функцию ActionPerformed
. До сих пор он работает нормально, но как только я снова нажимаю JComboBox
, он вызывает функцию ActionPerformed
, чего не должно быть. Я хочу вызвать функцию ActionPerformed
, когда элемент выбран в JComboBox
. Другими словами, он должен работать так же, как в первый раз, когда элемент был выбран из JComboBox
, а затем была вызвана функция ActionPerformed
. Я не могу понять, почему эта проблема возникает. Вот ссылки, на которые я смотрел, и я также провел некоторые другие поиски, но все еще не мог найти никакого относительного ответа на вышеупомянутую проблему.
- Добавление JComboBox в ячейку JTable
- Как использовать ActionListener в ComboBox для присвоения переменной значения
- https://coderanch.com/t/339842/java/ComboBox-ItemListener-calling
Вот код, вы можете скопировать, вставить его и проверить.
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.DefaultCellEditor;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.TableColumn;
public class TableExample implements ActionListener{
JFrame frame;
JComboBox skuNameComboBoxTable;
TableExample() {
frame = new JFrame();
String data[][] = {{"101", "Amit", "Choose"},
{"102", "Jai", "Choose"},
{"101", "Sachin", "Choose"}};
String column[] = {"ID", "Name", "Degree"};
JTable table = new JTable(data, column);
table.setBounds(30, 40, 200, 300);
JScrollPane scrollPane = new JScrollPane(table);
frame.add(scrollPane);
frame.setSize(300, 400);
frame.setVisible(true);
String[] array = {"BS(SE)", "BS(CS)", "BS(IT)"};
skuNameComboBoxTable = new JComboBox(array);
skuNameComboBoxTable.addActionListener(this);
TableColumn col = table.getColumnModel().getColumn(2);
col.setCellEditor(new DefaultCellEditor(skuNameComboBoxTable));
}
public static void main(String[] args) {
new TableExample();
}
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(null, "actionPerformed called");
}
}
Пожалуйста, скажите мне, почему эта проблема возникает и как я должен ее решить.