JCalendar Focus Event - PullRequest
       29

JCalendar Focus Event

1 голос
/ 04 октября 2011

Я использую JCalendar JDateChooser в столбце даты таблицы как tablecelleditor. Проблема в том, что при нажатии на ячейку столбца JDateChooser появляется, но если он теряет фокус, он не запускает событие потери фокуса. Как заставить огонь фокусироваться на потерянном событии? И после этого есть ли способ предотвратить потерю фокуса при срабатывании JCalendar после нажатия кнопки JCalendar?

То, что я пытаюсь сделать, это если кто-то укажет дату, выбрав дату из календаря stopCellEditing(); Иначе дождитесь остановки события потерянного фокуса или cancelCellEditing();

enter image description here

Ответы [ 2 ]

1 голос
/ 08 октября 2011

Я обнаружил событие propertyChanged в JDateChooser, которое срабатывает при выборе даты. И jTable1.putClientProperty("terminateEditOnFocusLost", true); заставляет таблицу завершить редактирование на focusLost

Редактировать: если всплывающее окно календаря не работает, если вы хотите изменить год, когда ячейка таблицы теряет фокус и завершает редактирование: (

jDateChooser.addPropertyChangeListener(new PropertyChangeListener() {

    @Override
    public void propertyChange(PropertyChangeEvent evt) {
        if (evt.getPropertyName().equals("date")) {
            stopCellEditing();
        }
    }
});

Редактировать (решено): вместо использования jTable1.putClientProperty("terminateEditOnFocusLost", true); добавление ta FocusListener к JTable в TableCellEditor и отмена редактирования при потере фокуса дают возможность проверить, является ли всплывающее окно JDateChooser's видимым или нет. Но перед этим JDateChooser должен быть расширен с помощью всплывающего isVisible метода. Потому что всплывающая переменная защищена. И компоненты редактора ячеек не должны быть фокусируемыми, иначе JTable также теряет фокус

1 голос
/ 08 октября 2011

В исходном дистрибутиве , упомянутом @mKorbel, com.toedter.calendar.demo.DemoTable - это пример, в котором com.toedter.calendar.JDateChooserCellEditor используется в качестве редактора ячеек.Вот основные шаги:

JTable table = new JTable(…);
table.setDefaultEditor(Date.class, new JDateChooserCellEditor());

Приложение: Вот sscce , который показывает ожидаемое поведение.

import com.toedter.calendar.demo.DemoTable;
import java.awt.EventQueue;
import javax.swing.JFrame;

/** @see http://stackoverflow.com/questions/7643893 */
public class CalendarTable {

    private void display() {
        JFrame f = new JFrame("CalendarTable");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(new DemoTable());
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                new CalendarTable().display();
            }
        });
    }
}
...