gpt4 book ai didi

java - keyBinding 中的焦点导航

转载 作者:行者123 更新时间:2023-11-30 06:22:10 24 4
gpt4 key购买 nike

在我的表单中,当我按下键盘上的 ENTER 按钮时,应该调用 okAction() 方法(并且调用完美)。

我的问题是处于焦点状态,当我填写文本字段然后按下 ENTER 按钮时,okAction() 没有被调用,因为焦点是在第二个文本字段上(不在面板上)。

如何解决这个问题?

public class T3 extends JFrame implements ActionListener {

JButton cancelBtn, okBtn;
JLabel fNameLbl, lNameLbl, tempBtn;
JTextField fNameTf, lNameTf;

public T3() {
add(createForm(), BorderLayout.NORTH);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 500);
setVisible(true);
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new T3();
}
});
}

public JPanel createForm() {
JPanel panel = new JPanel();
panel.getInputMap().put(KeyStroke.getKeyStroke("ENTER"), "Button");
panel.getActionMap().put("Button", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
okAction();
}
});

okBtn = new JButton("Ok");
okBtn.addActionListener(this);
cancelBtn = new JButton("Cancel");
tempBtn = new JLabel();
fNameLbl = new JLabel("First Name");
lNameLbl = new JLabel("Last Name");
fNameTf = new JTextField(10);
fNameTf.setName("FnTF");
lNameTf = new JTextField(10);
lNameTf.setName("LnTF");

panel.add(fNameLbl);
panel.add(fNameTf);
panel.add(lNameLbl);
panel.add(lNameTf);
panel.add(okBtn);
panel.add(cancelBtn);
panel.add(tempBtn);

panel.setLayout(new SpringLayout());
SpringUtilities.makeCompactGrid(panel, 3, 2, 50, 10, 80, 60);
return panel;
}

private void okAction() {
if (fNameTf.getText().trim().length() != 0 && lNameTf.getText().trim().length() != 0) {
System.out.println("Data saved");
} else System.out.println("invalid data");
}

@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == okBtn) {
okAction();
}
}
}

最佳答案

为您的 GUI 的 JRootPane 声明一个默认按钮:

public T3() {

//!! ..... etc...

setVisible(true);
getRootPane().setDefaultButton(okBtn);
}

事实上,如果设置了默认按钮,我看不出您需要使用键绑定(bind)。

关于java - keyBinding 中的焦点导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19688849/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com