繁体   English   中英

单击JTable单元内的JComboBox时,JComboBox在JTable外部消失

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM