Java 输入日期的密钥侦听器在linux版本中不起作用

Java 输入日期的密钥侦听器在linux版本中不起作用,java,swt,keylistener,Java,Swt,Keylistener,这是我的全部代码。我有两个类,第一个是MyDateTime,第二个是Employee。 我已经包括了我目前正在使用的代码。对于EmployeePart类,AbstractEditorPart是我们自己扩展的父类 public class MyDateTime extends DateTime{ public DateTime(Composite parent, int style) { super(parent, style); } pu

这是我的全部代码。我有两个类,第一个是MyDateTime,第二个是Employee。 我已经包括了我目前正在使用的代码。对于EmployeePart类,AbstractEditorPart是我们自己扩展的父类

public class MyDateTime extends DateTime{

    public DateTime(Composite parent, int style) 
    { 
        super(parent, style); 
    }

    public Date getValue() 
    { 
        Date date = new Date(getYear(), getMonth(), getDay()); 
        return date; 
    }
}




public Class EmployeePart extends AbstractEditorPart(
private MyDateTime currentDate;

public void createBody(Composite parent){
currentDate=Util.createDateChooserCombo(parent, toolkit, "Date:", 2);

}

public void save(Employee input){
return null;
}
}

}

结果比我最初想象的要复杂一点

一种解决方案是为包含
小部件的
组合
定义一个
表格列表
。 通过这种方式,您可以首先定义希望遍历它们的顺序

然后将一个
侦听器
添加到要遍历的每个
小部件
s。此
侦听器
将确定
表格列表中的下一项
,并在按下Tab或Enter键时强制聚焦此项

下面是一些示例代码:

public static void main(String[] args)
{
    Display display = Display.getDefault();
    Shell shell = new Shell(display);
    shell.setLayout(new FillLayout());

    final Composite content = new Composite(shell, SWT.NONE);
    content.setLayout(new FillLayout());

    Text first = new Text(content, SWT.BORDER);
    Text second = new Text(content, SWT.BORDER);

    content.setTabList(new Control[] {first, second});

    Listener enterListener = new Listener()
    {
        @Override
        public void handleEvent(Event event)
        {
            /* Is it a traverse via Tab or Enter? */
            if(event.keyCode == SWT.CR || event.keyCode == SWT.TRAVERSE_RETURN || event.keyCode == SWT.TRAVERSE_TAB_NEXT)
            {
                /* Get source of event */
                Widget source = event.widget;

                /* Get traverse order of content composite */
                Control[] tabList = content.getTabList();

                /* Try to find current position in the tab list */
                for(int i = 0; i < tabList.length; i++)
                {
                    if(source.equals(tabList[i]))
                    {
                        /* Get the next item in the tab list */
                        Control nextControl = tabList[(i + 1) % tabList.length];

                        /* And force the focus on this item */
                        nextControl.setFocus();
                        nextControl.forceFocus();

                        return;
                    }
                }
            }
        }
    };

    first.addListener(SWT.KeyUp, enterListener);
    second.addListener(SWT.KeyUp, enterListener);

    shell.pack();
    shell.open();

    while (!shell.isDisposed())
    {
        if (!display.readAndDispatch())
            display.sleep();
    }
    display.dispose();
}
publicstaticvoidmain(字符串[]args)
{
Display=Display.getDefault();
外壳=新外壳(显示);
setLayout(新的FillLayout());
最终复合材料含量=新复合材料(壳牌,SWT.NONE);
setLayout(新的FillLayout());
Text first=新文本(内容,SWT.BORDER);
第二个文本=新文本(内容,SWT.BORDER);
setTableList(新控件[]{first,second});
Listener enterListener=new Listener()
{
@凌驾
公共无效handleEvent(事件)
{
/*是通过制表符还是回车键进行遍历*/
if(event.keyCode==SWT.CR | | event.keyCode==SWT.TRAVERSE_返回| | event.keyCode==SWT.TRAVERSE_选项卡_下一步)
{
/*获取事件源*/
Widget source=event.Widget;
/*获取内容组合的遍历顺序*/
Control[]tabList=content.getTabList();
/*尝试在选项卡列表中查找当前位置*/
for(int i=0;i
尝试查找keycode 10。谢谢您的帮助,Baz,但这并没有发生。我在遍历文本字段方面没有问题,我需要遍历enterkeylistener的java.util.date。您的编码在文本字段上工作正常,但不响应日期字段。如果有其他选项可用,请告诉我!!“traverse java.util.date”是什么意思?当我按enter或tab from date字段时,焦点应该在下一个字段。@user2273302
java.util.date
不是GUI元素。那么您使用什么来显示日期呢?我在使用中的java.Util.date中为date创建了一个类,并根据我的需求进行了一些修改。使用构造函数我为date创建了UI。