KeyListener

Boa noite pessoal, sou novo aqui.
Tenho um dúvida.
Como eu faria pra usar um método KeyListener de uma classe, na classe principal? Eu tentei chamar o método mas não deu certo.

O que exatamente você quer fazer?

Estou fazendo um joguinho simples, com intuito acadêmico, sou estudante ainda. Eu criei uma classe com uma imagem e utilizo o KeyListener pra controlar ela na tela. Na classe principal main eu criei um objeto e chamei o método do KeyListener, porém não consigo controlar a imagem com ele.

Não entendi essa frase.
Quando você cria um listener, você precisa registrar/adicionar esse listener ao objeto que o aceita.
Você não chama os métodos do listener, quem vai chamar os métodos dele é o objeto onde ele foi adicionado.

Posta o código das suas classes que fica fácil identificar onde está errando.

package jogonave;


import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class NaveJogador extends JFrame{

    ImageIcon iconNave = new ImageIcon(getClass().getResource("ship-01.png"));
    JLabel lNave = new JLabel(iconNave);

    int shipposx = 50;
    int shipposy = 300;

    public void Nave() {
        lNave.setBounds(shipposx, shipposy, 125, 76);
    }
    
    
    public void jogabilidade(){
        /*
        W = 87; A = 65; S = 83; D = 68;
         */
    
        addKeyListener(new KeyListener() {
            @Override
            public void keyTyped(KeyEvent ke) {
            }

            @Override
            public void keyPressed(KeyEvent ke) {
                if (ke.getKeyCode() == 68) {
                    lNave.setBounds(lNave.getX() + 5, lNave.getY(), 125, 76);
                    shipposx += 5;
                }
                if (ke.getKeyCode() == 65) {
                    lNave.setBounds(lNave.getX() - 5, lNave.getY(), 125, 76);
                    shipposx -= 5;
                }
                if (ke.getKeyCode() == 87) {
                    lNave.setBounds(lNave.getX() , lNave.getY() - 5, 125, 76);
                    shipposy -= 5;
                }
                if (ke.getKeyCode() == 83) {
                    lNave.setBounds(lNave.getX() , lNave.getY() + 5, 125, 76);
                    shipposy += 5;
                }
            }

            @Override
            public void keyReleased(KeyEvent ke) {
                if (ke.getKeyCode() == 68) {
                    lNave.setIcon(iconNave);
                }
                if (ke.getKeyCode() == 65) {
                    lNave.setIcon(iconNave);
                }
                if (ke.getKeyCode() == 87) {
                    lNave.setIcon(iconNave);
                }
                if (ke.getKeyCode() == 83) {
                    lNave.setIcon(iconNave);
                }
            }
        }
        );
    }
}

package jogonave;

import javax.swing.JFrame;

public class Tela extends JFrame{
    
    NaveJogador nave = new NaveJogador();
    Cenario fase = new Cenario();
    
    public void JanelaJogo() {
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(1024, 700); // números de pixels de x e y respectivamente
        setLocationRelativeTo(null);
        setVisible(true);
        setLayout(null);
        add(nave.lNave);
        add(fase.lNebulaBlue);
        nave.Nave();
        fase.nebulablue();
        
    }
    
}

package jogonave;

import javax.swing.ImageIcon;
import javax.swing.JLabel;
public class Cenario {
    
    ImageIcon iconNebulaBlue = new ImageIcon(getClass().getResource("Nebula Blue.png"));
    
    JLabel lNebulaBlue = new JLabel(iconNebulaBlue);
    
    public void nebulablue(){
        lNebulaBlue.setBounds(0, 0, 4000,4000);
    }
    
}
    identar texto pré-formatado por 4 espaços

package jogonave;


public class JogoNave{

    public static void main(String[] args) {

        Tela screen = new Tela();
        screen.JanelaJogo();
        NaveJogador controles = new NaveJogador();
        controles.jogabilidade();
        
    }
    
   
}

Aqui estão a classe que eu utilizei o KeyListener e a classe principal onde chamei o método.
Sei que pode não estar bom, mas é porque sou iniciante na área.Texto pré-formatado

Edita seus posts anteriores e formata o código Java com o botão de Texto pré-formatado, identificado pelo botão </>.

Posta também o fonte da classe Tela.

Esse KeyListener serve para tratar as teclas pressionada na tela NaveJogador, não faz sentido chamar esse método jogabilidade na classe JogoNave.

Eu registraria o listener no próprio construtor da classe NaveJogador.

Também não faz sentido a classe NaveJogador ser um JFrame.

Abaixo um exemplo com o seu JLabel sendo movido ao pressionar as teclas W, A, S, D:

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class NaveJogador extends JFrame { // não me parece correto a nave do Jogador ser um JFrame

    private static final Image NAVE_PRA_DIREITA = carregarImagem("/ship-01.png"); // aqui você vai usar uma imagem pra cada posição da nave
    private static final Image NAVE_PRA_BAIXO = carregarImagem("/ship-01.png");
    private static final Image NAVE_PRA_ESQUERDA = carregarImagem("/ship-01.png");
    private static final Image NAVE_PRA_CIMA = carregarImagem("/ship-01.png");

    private static Image carregarImagem(String caminho) {
        try {
            InputStream arquivo = NaveJogador.class.getResourceAsStream(caminho);
            return ImageIO.read(arquivo);
        } catch (IOException e) {
            throw new RuntimeException("Não foi possível encontrar a imagem \"" + caminho + "\"", e);
        }
    }

    private JLabel labelNave;

    private Point posicao;

    private Dimension tamanho;

    public NaveJogador() {
        posicao = new Point(50, 300);
        tamanho = new Dimension(125, 76);

        labelNave = new JLabel(new ImageIcon(NAVE_PRA_DIREITA));
        labelNave.setBounds(posicao.x, posicao.y, tamanho.width, tamanho.height);

        JPanel panel = new JPanel(null);
        panel.setFocusable(true);
        panel.add(labelNave);
        panel.addKeyListener(new KeyAdapter() {

            @Override
            public void keyPressed(KeyEvent ke) {
                pressionou(ke.getKeyCode());
            }
        });

        setAutoRequestFocus(true);
        setSize(800, 600);
        setContentPane(panel);
        setLocationRelativeTo(null);
    }

    private void pressionou(int tecla) {
        Image imagem = null;
        switch (tecla) {
            case KeyEvent.VK_W: // tecla W = cima
                posicao.y -= 5;
                imagem = NAVE_PRA_CIMA;
                break;
            case KeyEvent.VK_A: // tecla A = esquerda
                posicao.x -= 5;
                imagem = NAVE_PRA_ESQUERDA;
                break;
            case KeyEvent.VK_S: // tecla S = baixo
                posicao.y += 5;
                imagem = NAVE_PRA_BAIXO;
                break;
            case KeyEvent.VK_D: // tecla D = direita
                posicao.x += 5;
                imagem = NAVE_PRA_DIREITA;
                break;
            default:
                return;
        }
        labelNave.setIcon(new ImageIcon(imagem));
        labelNave.setBounds(posicao.x, posicao.y, tamanho.width, tamanho.height);
        revalidate();
    }
}

Exemplo para rodar a tela:

import javax.swing.JFrame;

public class JogoNave {

    public static void main(String[] args) {
        try {
            NaveJogador tela = new NaveJogador();
            tela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            tela.setVisible(true);
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }
}