在 JTabbedPane 中的选项卡之间切换时通过 KeyListener 更改焦点
我计划做的是,当我按 Enter
键时,应用程序将启动按钮 btn_teach
,并切换到另一个以 textfield
为焦点的选项卡。现在,当我实现它时,如果我手动按下按钮(而不是按 Enter
),它就可以完美工作。当我实际按下 Enter
时,选项卡会切换回来,但该选项卡上的文本字段不会获得焦点。
tp
是 JTabbedPane
。 我的计划是从选项卡索引 1 切换到选项卡索引 0 并设置 txt_send 聚焦 在
public void actionPerformed(ActionEvent arg0)
{
// TODO Auto-generated method stub
String say = txt_saypane.getText();
String ans = txt_anspane.getText();
//this.clear();
say = say.replace("\n","");
ans = ans.replace("\n","");
this.talk(this.botTeach(say,ans), false);
tp.setSelectedIndex(0);
}
public void stateChanged(ChangeEvent arg0)
{
// TODO Auto-generated method stub
int sel = tp.getSelectedIndex();
if(sel == 0)
txt_send.requestFocusInWindow();
if(sel == 1)
txt_saypane.requestFocusInWindow();
}
public void keyPressed(KeyEvent e)
{
// TODO Auto-generated method stub
if(e.getKeyCode() == KeyEvent.VK_ENTER)
{
if(txt_saypane.isFocusOwner() || txt_anspane.isFocusOwner())
btn_teach.doClick();
}
}
JTabbedPane 中的选项卡之间切换时通过 KeyListener
更改焦点的正确方法是什么?
What I planned to do is when I press Enter
key, the application will fire up the button btn_teach
, and switch to another tab with textfield
focused. Now, when I implement it, it works perfectly if I press the button manually (not pressing Enter
). When I actually press Enter
, the tab switches back but the text field on that tab is not focused.
tp
being JTabbedPane
.
My plan is to switch from tab index 1 to tab index 0 and set txt_send
focused
public void actionPerformed(ActionEvent arg0)
{
// TODO Auto-generated method stub
String say = txt_saypane.getText();
String ans = txt_anspane.getText();
//this.clear();
say = say.replace("\n","");
ans = ans.replace("\n","");
this.talk(this.botTeach(say,ans), false);
tp.setSelectedIndex(0);
}
public void stateChanged(ChangeEvent arg0)
{
// TODO Auto-generated method stub
int sel = tp.getSelectedIndex();
if(sel == 0)
txt_send.requestFocusInWindow();
if(sel == 1)
txt_saypane.requestFocusInWindow();
}
public void keyPressed(KeyEvent e)
{
// TODO Auto-generated method stub
if(e.getKeyCode() == KeyEvent.VK_ENTER)
{
if(txt_saypane.isFocusOwner() || txt_anspane.isFocusOwner())
btn_teach.doClick();
}
}
What is the correct way to change focus via KeyListener
when switching between tabs in JTabbedPane
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
要使
JButton
在按下ENTER
键时起作用,您可以将该JButton
设为框架上的DEFAULT Button
,而不是使用KeyEvents
。您可以通过编写以下内容来完成此操作:编写此行还将使该 JButton 在按下 ENTER 键时起作用,而无需为其编写整个 KeyListener 部分。从此
JButton
中删除KeyListeners
。一旦此JButton
为DEFAULT Button
,现在按ENTER
键,它将执行在其 actionPerformed() 方法中编写的工作。不要将 KeyEvents 与 Swing 一起使用,它属于 awt,KeyBinding 是我们在 Swing 中使用的。
以下是一个可以帮助您实现目标的示例程序:
For
JButton
to work on press of theENTER
key you can make thatJButton
to be yourDEFAULT Button
on frame, instead of usingKeyEvents
. You can do this by writing :Writing this line will also make this JButton work on pressing the ENTER key, without you writing the whole KeyListener part for it. Remove the
KeyListeners
from thisJButton
. Once thisJButton
is theDEFAULT Button
, now on Pressing theENTER
key, it will do the work that is written inside it's actionPerformed() method.Don't use KeyEvents with Swing, that belongs to awt, KeyBinding is what we use with Swing.
Here is one sample program to help your cause :