gpt4 book ai didi

java - 将按钮添加到 GUI 后 JTextField.requestFocus() 停止工作

转载 作者:行者123 更新时间:2023-12-02 11:30:17 25 4
gpt4 key购买 nike

我有一个使用 javax.swing 和 java.awt 制作的 GUI,请求焦点致力于保持文本字段处于焦点状态,以便用户可以从键盘开始。然后,我为每个整数 0-9 添加了按钮,以及一个清除字段按钮。然而,焦点现在总是从按钮开始。

每当我单击按钮时,焦点仍然返回到文本字段,或者如果我启动焦点,它仍保留在文本字段中,如何解决此问题并在每次打开窗口时将焦点放在文本字段上?

数字按钮示例

JButton btn0 = new JButton("0");
panel.add(btn0);
btn0.setBounds(50, 360, 50, 50);
btn0.setHorizontalAlignment(SwingConstants.CENTER);
btn0.setForeground(Color.BLACK);
btn0.setFont(new Font("Arial", Font.BOLD, 20));
btn0.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String userIn = txtGuess.getText() + btn0.getText();
txtGuess.setText(userIn);
}
});

文本字段代码

txtGuess = new JTextField();
txtGuess.setBounds(325, 220, 100, 35);
panel.add(txtGuess);
txtGuess.setFont(new Font("Arial", Font.BOLD, 25));
txtGuess.setHorizontalAlignment(SwingConstants.CENTER);
txtGuess.setBackground(Color.decode("#206BA4"));
txtGuess.setForeground(Color.decode("#EBF4FA"));
txtGuess.setBorder(loweredBorder);
txtGuess.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
checkGuess();
}
});

checkGuess()结束;

finally {
txtGuess.requestFocus(); //sets focus to the text box after checking guess
txtGuess.selectAll(); //highlights all text in the text field so UX is improved
if (attempt >= 10) {
lblOutput.setText("You lose! Try Again?");
newGame();
}

最佳答案

txtGuess.requestFocus(); 

首先,您不应该使用该方法。阅读该方法的 API,它会告诉您更好的使用方法。

how can I fix this problem and have the focus on the text field every time the window opens?

默认情况下焦点应该转到框架左上角的组件。如果这没有发生,那么你正在做一些奇怪的事情。

如果您的文本字段不是框架上的第一个组件,那么您只能在 GUI 可见后将焦点设置在它上面。

根据发布的代码,文本字段看起来位于按钮上方,因此它应该获得焦点。也许问题在于您使用的是空布局以及向框架添加组件的顺序。如果没有适当的 MCVE,我们就无法判断。

针对您的代码的其他建议:

  1. 不要使用 null 布局和 setBounds()。您不应该手动设置大小/Swing 被设计为与布局管理器一起使用。

  2. 无需为每个按钮创建唯一的 ActionListener。您可以创建一个由每个按钮共享的通用监听器。查看:How to add a shortcut key for a jbutton in java?了解此方法的工作示例。

I'm trying to figure out how to create the MCVE version to demonstrate the problem

这不是什么大谜团。您说过您有一个带有文本字段的框架并且它有效。然后你添加了一个按钮,但它不起作用。因此,MCVE 将仅由一个带有文本字段和按钮的框架组成。游戏逻辑与您的问题无关,因此不需要。因此 MCVE 应该约为 10 - 15 行代码。

关于java - 将按钮添加到 GUI 后 JTextField.requestFocus() 停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49348067/

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