JTable с JComboBox внутри ячейки программируемой открытой - PullRequest
0 голосов
/ 25 февраля 2019

Эй, все, что я должен был понять это в течение нескольких часов.В настоящее время я должен щелкнуть ячейку, а затем снова щелкнуть, чтобы открыть раскрывающийся список (это средство выбора даты).

Моя цель - использовать код, как только он обнаружит щелчок внутри ячейки.это в правильном столбце.

Код, который я пробовал:

comboBox.setPopupVisible(true);             

и

table.editCellAt(0, 4);

и

comboBox.showPopup();

В настоящее время яУ меня есть / клетки как редактируемые.Хотя, когда я запускаю программу и нажимаю на одну из этих ячеек, это ошибка, которая дает мне:

Я определяю свое поле со списком так:

public static JComboBox comboBox = new JComboBox();

И я звонюэто из другого класса.

class1:

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

А теперь мой другой класс:

TblWithDropdown class:

 @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 (Неизвестный источник)

Визуально вот как выглядит моя таблица с полем:

[enter image description here [enter image description here

Справка была бы полезна для решения этой проблемы!

ОБНОВЛЕНИЕ 1

enter image description here

ОБНОВЛЕНИЕ 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);

1 Ответ

0 голосов
/ 25 февраля 2019

Вместо того, чтобы напрямую вызывать 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();
            }
        });
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...