Java JLabel上的setText不';t在按下键的方法中工作

Java JLabel上的setText不';t在按下键的方法中工作,java,swing,user-interface,keylistener,settext,Java,Swing,User Interface,Keylistener,Settext,每当我试图在KeyPressed方法中使用setText时,它都不起作用,尽管当我在同一个类中的不同方法(initComponents)中使用它时,它也起作用 如果有必要,请随时询问任何其他代码 这是不起作用的按键方法: @Override public void keyTyped(KeyEvent e) { char typed = e.getKeyChar(); if (Character.isLetter(typed) && r.getHuidig

每当我试图在KeyPressed方法中使用setText时,它都不起作用,尽管当我在同一个类中的不同方法(initComponents)中使用它时,它也起作用

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

这是不起作用的按键方法:

    @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();
            }
        }
    }
}
@覆盖
public void keyTyped(KeyEvent e){
char typed=e.getKeyChar();
if(Character.isLetter(类型化)和&r.getHuidigeKolom()=r.getAantalLetters()){//typed=10被输入
这个.controle();
}
如果(typed==8&&r.getHuidigeKolom()>0){//typed 8是退格
这个.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);
}
private void initComponents(字符串woord){
这个.setLayout(新的GridLayout(r.getAantalPogingen(),r.getAantalLetters(),2,2));
for(int i=0;i
我非常感谢您能提供的任何帮助。

如果没有密钥绑定,那么要确定问题的确切原因将有点困难,但我猜问题的根源在于您使用的是密钥侦听器而不是密钥绑定

KeyListener
对关注的组件非常挑剔,这可能是您遇到的问题。除非它添加到的组件具有应用程序的焦点,否则它不会启动(因此它不适合与容器一起使用)。下面是一个如何使用的快速示例:


什么是
r?请问你的目标是什么,没有你的SSCCE或MCVE或MCTRE,任何东西都不能被切碎,短的,可运行的,可以用本地变量中的硬编码值编译。上面代码中的[r.positie(r.getHuidigeRij(),i)]和下面代码中的[i]在.setText()旁边有相同的值吗?“如果有必要,请随意询问任何其他代码!”-提供一个可运行的示例。看,这是一个叫做行话的猜字游戏,你猜一个单词,你只会看到第一个字母,如下图所示:现在,无论何时我打字,它都应该像这样填满棋盘:r.getLetters()[numberher]是一个显示字母的方框,在这种情况下,它可以从0-24填充,因为它是一个5x5的棋盘。
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);
    }
}