JCalendar焦点活动

时间:2011-10-04 06:09:50

标签: java jcalendar jdatechooser

我在表日期列中使用JCalendarJDateChooser作为tablecelleditor。问题是当列单元格单击JDateChooser时出现,但如果它失去焦点,则不会触发焦点丢失事件。如何让它成为焦点丢失的事件?在执行此操作后,有任何方法可以防止在单击JCalendar按钮后出现JCalendar时其焦点丢失?

我尝试做的事情是,如果有人通过从日历中选择日期来指定日期stopCellEditing();等等,直到焦点丢失事件停止或cancelCellEditing();

enter image description here

2 个答案:

答案 0 :(得分:1)

在@mKorbel提到的source distribution中,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();
            }
        });
    }
}

答案 1 :(得分:1)

我在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);FocusListener添加到JTable TableCellEditor,并在焦点丢失时取消编辑,有机会检查JDateChooser's是否JDateChooser 1}}弹出窗口是否可见。但在此之前,应使用弹出式isVisible方法扩展JTable。因为弹出变量受到保护。并且单元格编辑器组件不应该是可聚焦的,否则{{1}}也会失去焦点