【问题标题】:JTable with JComboBox inside cell programmable opened带有 JComboBox 的 JTable 在单元内可编程打开
【发布时间】:2019-02-25 16:57:30
【问题描述】:

嘿,我已经花了几个小时来解决这个问题。目前我必须单击单元格,然后再次单击才能打开下拉列表(这是一个日期选择器)。

我的目标是,一旦检测到在正确列中的单元格内点击,就使用代码。

我试过的代码是:

comboBox.setPopupVisible(true);             

table.editCellAt(0, 4);

comboBox.showPopup();

目前我确实有那个/单元格是可编辑的。虽然当我运行程序并单击其中一个单元格时,这是它给我的错误:

我这样定义我的组合框:

public static JComboBox comboBox = new JComboBox();

我是从另一个班级打电话给这个的。

类1:

if (selCol == 4) {
    try {
             TblWithDropdown.dropBox();
        } catch (InterruptedException e) {
             e.printStackTrace();
    }
} 

现在是我的另一堂课:

TblWithDropdown 类:

 @SuppressWarnings("rawtypes")
 public static JComboBox comboBox = new JComboBox();

public class TblWithDropdown {
   public static void dropBox() throws InterruptedException {
      comboBox.showPopup();
      //table.editCellAt(0, 4);
      comboBox.setPopupVisible(true);
   }
}

它给我的错误是:

线程“AWT-EventQueue-0”中的异常 java.awt.IllegalComponentStateException:组件必须显示在屏幕上才能确定其位置 在 java.awt.Component.getLocationOnScreen_NoTreeLock(Unknown Source)

从视觉上看,这是我的带有组合框的表格的样子:

[ [

帮助解决这个问题会很棒!

更新 1

更新 2

_al = alldata.fillInData("SELECT fname FROM users");
String[] testers = new String[_al.size()];
TblWithDropdown.comboBox = new JComboBox(_al.toArray(testers));
TblWithDropdown.table.getColumnModel().getColumn(3)
                      .setCellEditor(new DefaultCellEditor(TblWithDropdown.comboBox));
JXDatePicker res = new JXDatePicker();
res.setFormats(DateFormat.getDateInstance(DateFormat.MEDIUM));
res.setDate(new Date());
res.getMonthView().setDayForeground(Calendar.SUNDAY, Color.RED);

DatePickerCellEditor testser = new DatePickerCellEditor(new SimpleDateFormat("dd/MM/yyyy HH:mm:ssZ"));

testser.setClickCountToStart(0);
testser.setFormats(new SimpleDateFormat("dd/MM/yyyy HH:mm:ssZ"));
TableColumn dateColumn = TblWithDropdown.table.getColumnModel().getColumn(4);
dateColumn.setCellEditor(testser);

【问题讨论】:

  • @TT 这将需要大量代码......而且它很可能。无论如何都不会运行。

标签: java swing jtable jcombobox


【解决方案1】:

您可以尝试的不是直接调用showPopup,而是将其作为focusGained 编辑器JComboBox 组件的侦听器:

public static JComboBox comboBox = new JComboBox();
// initialize editor component
comboBox.addFocusListener(new FocusAdapter() {
    public void focusGained(FocusEvent e) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                comboBox.showPopup();
            }
        });
    }
});

【讨论】:

  • 感谢TT的回复。但这似乎也与我原来的错误相同。我已将新代码放在 UPDATE 1 下的 OP 中
  • 新代码确实可以正常工作,但在单击时无法删除下拉列表。我向 OP 添加了更多代码,因为我可能不正确地认为它只是一个组合框。似乎它被称为 DatePickerCellEditor,在单元格内带有 JXDatePicker
猜你喜欢
  • 1970-01-01
  • 2020-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-07
  • 2011-03-16
  • 2013-02-10
  • 2012-03-05
相关资源
最近更新 更多