gpt4 book ai didi

java - JLabel 上的 setText 在 KeyPressed 方法中不起作用

转载 作者:行者123 更新时间:2023-12-01 13:18:47 24 4
gpt4 key购买 nike

每当我尝试在 KeyPressed 方法中使用 setText 时,它都不起作用,但当我在同一个类中的不同方法(initComponents)中使用它时,它会在那里工作。

如果有必要,请随时询问任何其他代码!

这是不起作用的 KeyPressed 方法:

    @Override
public void keyTyped(KeyEvent e) {
char typed = e.getKeyChar();

if (Character.isLetter(typed) && r.getHuidigeKolom() < r.getAantalLetters()) {
typed = Character.toUpperCase(typed);
r.getLetters()[r.positie(r.getHuidigeRij(), r.getHuidigeKolom())].setText(typed + "");
r.getLetters()[r.positie(r.getHuidigeRij(), r.getHuidigeKolom())].setBackground(Color.blue);

if (r.getHuidigeKolom() == 0) {
for (int i = 1; i < r.getAantalLetters(); i++) {
r.getLetters()[r.positie(r.getHuidigeRij(), i)].setText(".");
r.getLetters()[r.positie(r.getHuidigeRij(), i)].setBackground(Color.blue);
}

r.volgendeKolom(true);

if (r.getHuidigeKolom() < r.getAantalLetters()) {
r.getLetters()[r.positie(r.getHuidigeRij(), r.getHuidigeKolom())].setBackground(hoverKleur);
}

if (typed == 10 && r.getHuidigeKolom() >= r.getAantalLetters()) { //typed 10 is ENTER
this.controle();
}

if (typed == 8 && r.getHuidigeKolom() > 0) { //typed 8 is BACKSPACE
this.eentjeTerug();
}
}
}
}

setText 方法在此方法中确实有效:

    private void initComponents(String woord) {
this.setLayout(new GridLayout(r.getAantalPogingen(), r.getAantalLetters(), 2, 2));
for (int i = 0; i < r.getAantalPogingen() * r.getAantalLetters(); i++) {
r.getLetters()[i] = new Label();
r.getLetters()[i].setBackground(Color.white);
r.getLetters()[i].setForeground(Color.black);
r.getLetters()[i].setAlignment(Label.CENTER);
r.getLetters()[i].setFont(new Font("Groot", Font.BOLD, 48));
this.add(r.getLetters()[i]);
}

for (int i = 0; i < 5; i++) {
r.getLetters()[i].setText(woord.charAt(i) + "");
r.getLetters()[i].setBackground(Color.blue);
}

r.setHuidigeKolom(0);
r.setHuidigeRij(0);
}

我非常感谢您提供的任何帮助。

最佳答案

没有 MCTRE查明问题的确切原因会有点困难,但我猜测问题的根源是您使用的是 key 监听器而不是 key 绑定(bind)。

KeyListener 对于关注哪个组件非常挑剔,这可能是您遇到的问题。除非添加到的组件具有应用程序的焦点,否则它不会触发(因此与容器一起使用并不理想)。以下是如何使用 Key Binding 的快速示例:

import java.awt.event.*;
import javax.swing.*;

public class KeyBindings extends Box{
public KeyBindings(){
super(BoxLayout.Y_AXIS);
final JTextPane textArea = new JTextPane();
textArea.insertComponent(new JLabel("Text"));
add(textArea);

Action action = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
textArea.setText("New Text");
}};
String keyStrokeAndKey = "control SPACE";
KeyStroke keyStroke = KeyStroke.getKeyStroke(keyStrokeAndKey);
textArea.getInputMap().put(keyStroke, keyStrokeAndKey);
textArea.getActionMap().put(keyStrokeAndKey, action);
}


public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(new KeyBindings());
frame.pack();
frame.setVisible(true);
}
}

关于java - JLabel 上的 setText 在 KeyPressed 方法中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22227548/

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