Java 输入日期的密钥侦听器在linux版本中不起作用
这是我的全部代码。我有两个类,第一个是MyDateTime,第二个是Employee。 我已经包括了我目前正在使用的代码。对于EmployeePart类,AbstractEditorPart是我们自己扩展的父类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
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字段时,焦点应该在下一个字段。@user2273302java.util.date
不是GUI元素。那么您使用什么来显示日期呢?我在使用中的java.Util.date中为date创建了一个类,并根据我的需求进行了一些修改。使用构造函数我为date创建了UI。