【发布时间】:2017-08-15 14:23:57
【问题描述】:
我有一个带有几个元素的 GUI,我只是在这些元素上使用 Tab,在我指定的最后一个元素(即文本区域)上,如果我按下 Tab,我希望它产生一个事件。
它工作得非常好,因为我用输入按钮而不是标签按钮编写了我的代码,我不知道为什么。
我的 GUI 窗口:
这是我的代码:
textArea_beschreibung.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_TAB){
String dauervar = input_dauer.getText (); //auslesen von benutzername
String beschreibungvar = textArea_beschreibung.getText (); //auslesen von benutzername
String projektvar = (String)comboBox_projekt.getSelectedItem();
String aktivitvar = (String)comboBox_aktivitaet.getSelectedItem();
String datumvar = input_datum.getText ();
SimpleDateFormat df1 = new SimpleDateFormat("dd/MM/yyyy");
Date date = null;
try {
date = df1.parse(datumvar);
} catch (ParseException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
long epoch = date.getTime();
String numberAsStringUnixTImestamp = String.valueOf(epoch / 1000);
String [ ] datenarray = {"a","b","c","d","e","f"};
datenarray[0] = numberAsStringUnixTImestamp;
datenarray[1] = dauervar;
datenarray[2] = beschreibungvar;
datenarray[3] = projektvar;
datenarray[4] = aktivitvar;
datenarray[5] = usernamevar;
String JsonArray = "{ \"" + "datum" + "\":\"" + datenarray[0] + "\", \"" + "dauer" + "\":\"" + datenarray[1] + "\", \"" + "beschreibung" + "\":\"" + datenarray[2] + "\", \"" + "projektname" + "\":\"" + datenarray[3] + "\", \"" + "kategorie" + "\":\"" + datenarray[4] + "\", \"" + "username" + "\":\"" + datenarray[5] + "\" }";
input_datum.setText(reportDate);
if(check_datum.isSelected()){
CustomDateFinal[0] = datumvar;
input_datum.setText(CustomDateFinal[0]);
}
input_dauer.setText(USERDefTimeJSON);
textArea_beschreibung.setText("");
comboBox_projekt.requestFocus();
try {
SimplePingPong.httpRequestVoid(JsonArray,"unused","werte");
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
});
【问题讨论】:
-
当您按下 TAB 键时 - 您是否仍会收到事件并且只是
e.getKeyCode() == KeyEvent.VK_TAB未能返回 true?那么 getKeyCode 的值是什么? -
当我按下 Tab 时,它只是跳转到下一个元素。我也不确定,但我使用 VK_ENTER 键以相同的方式执行此操作,并且效果很好。文本区域也不再存在于遍历策略中,但仍跳转到下一个元素
-
OK,查看 java.awt.KeyboardFocusManager 的 setDefaultFocusTraversalKeys。您必须重新定义此集合以避免将 TAB 用作前向遍历功能键。 (作为用户,我会对您想要实现的行为感到有些恼火。)
标签: java swing user-interface keylistener keyevent