【发布时间】:2018-08-31 13:19:59
【问题描述】:
我在Jtable 单元格中使用JComboBox。当我单击JComboBox 并从中选择一个值时,它会调用ActionPerformed 函数。到这里它工作正常,但只要我再次单击JComboBox,它就会调用ActionPerformed 函数,它不应该这样做。我想要的是,在JComboBox 中选择项目时调用ActionPerformed 函数。换句话说,它应该像第一次从JComboBox 中选择项目然后调用ActionPerformed 函数时一样工作。我无法弄清楚为什么会出现这个问题。以下是我查看过的链接,我也进行了一些其他搜索,但仍然找不到上述问题的任何相关答案。
- Adding JComboBox to a JTable cell
- How to use ActionListener on a ComboBox to give a variable a value
- 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");
}
}
请告诉我为什么会出现这个问题以及我应该如何解决它。
【问题讨论】: