繁体   English   中英

带有JComboBox的JTable在单元格可编程内部打开

[英]JTable with JComboBox inside cell programmable opened

嘿,我花了几个小时才弄清楚这一点。 当前,我必须单击该单元格,然后再次单击以打开下拉列表(这是一个日期选择器)。

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

我尝试过的代码是:

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的位置(未知源)

从视觉上看,这就是我的带有combox的表格:

[ 在此处输入图片说明 [ 在此处输入图片说明

为了解决这个问题,帮助会非常棒!

更新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);

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

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();
            }
        });
    }
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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