[英]JComboBox disappears outside of JTable when JComboBox inside JTable cell is clicked
我对使用Java编程有些陌生。 我正在创建一个程序,该程序可以通过单击按钮将项目添加到待办事项列表中。
我在表的单元格内添加了一个JComboBox下拉列表,并且在用户输入JTextField和“添加到列表”按钮之间的表下方显示了相同的comboBox。
问题是:当我单击表格单元格内的JComboBox时,用户输入和添加到列表按钮之间的JComboBox消失了。 有谁知道是什么原因导致这种现象消失了???
我正在使用Eclipse运行Java程序,并且在下面链接了屏幕截图。
**注意:该项目尚未完成,因此并非所有功能都可以正常工作。 用户输入和添加到列表按钮尚不起作用。 剪1 剪2
package list;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.DefaultCellEditor;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JComboBox;
import javax.swing.JButton;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableModel;
public class EditableTable {
public static void main(String[] a) {
JFrame frame = new JFrame("To-Do List");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTextField input = new JTextField("Enter the to-do item");
input.setBounds(10,100,200,30);
frame.add(input);
JButton button = new JButton("Add to List");
button.setBounds(400,100,100,30);
frame.add(button);
String[] columnTitles = { "To-Do Item", "Category", "Completed?" };
Object[][] dataEntries = { { "Toy Story 3", "Movie/TV Show", new Boolean(false) },
{ "Stranger Things 3", "Movie/TV Show", new Boolean(false) },
{ "Game of Thrones", "Movie/TV Show", new Boolean(false) },
{ "Deep Sea Fishing ", "Adventure", new Boolean(true) }, };
TableModel model = new EditableTableModel(columnTitles, dataEntries);
JTable table = new JTable(model);
table.createDefaultColumnsFromModel();
String[] cateogry = { "Movie/TV Show", "Adventure", "Food", "Other"};
JComboBox comboBox = new JComboBox(cateogry);
table.getColumnModel().getColumn(1).setCellEditor(new DefaultCellEditor(comboBox));
comboBox.setBounds(230,100,130,30);
comboBox.setSelectedIndex(0);
frame.add(comboBox);
frame.add(new JScrollPane(table));
frame.setSize(600, 200);
frame.setVisible(true);
}
}
class EditableTableModel extends AbstractTableModel {
String[] columnTitles;
Object[][] dataEntries;
int rowCount;
public EditableTableModel(String[] columnTitles, Object[][] dataEntries) {
this.columnTitles = columnTitles;
this.dataEntries = dataEntries;
}
public int getRowCount() {
return dataEntries.length;
}
public int getColumnCount() {
return columnTitles.length;
}
public Object getValueAt(int row, int column) {
return dataEntries[row][column];
}
public String getColumnName(int column) {
return columnTitles[column];
}
public Class getColumnClass(int column) {
return getValueAt(0, column).getClass();
}
public boolean isCellEditable(int row, int column) {
return true;
}
public void setValueAt(Object value, int row, int column) {
dataEntries[row][column] = value;
}
}
您需要为JTable创建一个JComboBox,并为您的公式创建一个单独的JComboBox。 重用相同的变量将不起作用或产生奇怪的结果。
...
String[] cateogry = { "Movie/TV Show", "Adventure", "Food", "Other"};
JComboBox tableComboBox = new JComboBox(cateogry);
table.getColumnModel().getColumn(1).setCellEditor(new DefaultCellEditor(tableComboBox));
JComboBox comboBox = new JComboBox(cateogry);
comboBox.setBounds(230,100,130,30);
comboBox.setSelectedIndex(0);
frame.add(comboBox);
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.