Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JCalendar焦点事件_Java_Jcalendar_Jdatechooser - Fatal编程技术网

Java JCalendar焦点事件

Java JCalendar焦点事件,java,jcalendar,jdatechooser,Java,Jcalendar,Jdatechooser,我在表日期列中将的JDateChooser用作tablecelleditor。问题是,当列单元格单击时,会出现JDateChooser,但如果它失去焦点,则不会触发焦点丢失事件。如何使其成为火灾焦点丢失事件?执行此操作后,当单击JCalendar按钮后出现JCalendar时,是否有任何方法防止其发射焦点丢失 我尝试做的事情是,如果有人通过从日历stopCellEditing()中选择日期来指定日期Else等待焦点丢失事件停止或cancelleediting() 在@mKorbel提到的中,co

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

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

在@mKorbel提到的中,
com.toedter.calendar.demo.demovable
是一个使用
com.toedter.calendar.JDateChooserCellEditor
作为单元格编辑器的示例。基本步骤如下

JTable table = new JTable(…);
table.setDefaultEditor(Date.class, new JDateChooserCellEditor());
附录:这是一个显示预期行为的示例

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

我在
JDateChooser
中发现一个
propertyChanged
事件,该事件在选择日期时被触发。和
jTable1.putClientProperty(“terminateEditOnFocusLost”,true)使表格在焦点丢失时终止编辑

编辑:当日历弹出窗口关闭时,如果要更改使表格单元格失去焦点并终止编辑的年份:(


编辑(已解决):而不是使用
jTable1.putClientProperty(“terminateEditOnFocusLost”,true)
将ta
FocusListener
添加到
TableCellEditor
中的
JTable
中,并在焦点丢失时取消编辑,这样可以检查
JDateChooser的弹出窗口是否可见。但是在此之前,
JDateChooser
应该使用弹出窗口
isVisible
方法进行扩展而且单元格编辑器组件不应该是可聚焦的,否则
JTable
也会失去它的焦点

正如我所知,JCalendar中是否包含了TableEditor/Renderer工具?您是从jar使用JCalendar,还是从源文件使用JCalendar,如果是从jar,则下载源文件(JCalendarCellEditor.java)我使用jar找到了这个类。我还应该下载源文件吗?在使用这个类之前,请检查一下,我认为普通java文件和classIt之间有什么区别吗?它是一个非常简单的CellEditor:/我需要像JDateChooser.addDateSelectionListener(public void dateSelected(DateEvent evt){…}这样的东西;顺便说一句,我在JDateChooser中更改日期时发现了一个propertyChanged事件。现在我只需要使JDateChooser触发FocusLoss,我无法再现您使用
JDateChooserCellEditor
描述的效果;一个可能会有所帮助。这应该是表格单元格编辑器的正常行为。表格单元格编辑器在焦点时应取消单元格编辑丢失,并在编辑完成时停止单元格编辑。因此,当有人选择日期时,它应停止单元格编辑。这可以通过propertyChanged事件完成。但当单元格编辑器失去焦点时,例如当我更改包含单元格编辑器表的选项卡时,单元格编辑器不会取消单元格编辑和jTable1.putClientProperty(“terminateEditOnFocusLost”,正确);修复它
jDateChooser.addPropertyChangeListener(new PropertyChangeListener() {

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