1

私はグラフィックプログラミングに不慣れで、KeyListenerを使用して左または右に移動および画像化するのにいくつかの問題があります。現在、私のコードは、キーが押されていることを登録していません。誰かがこれを登録するだけで私を助けることができれば、私は残りを自分で行うことができます。

フレームコードは次のとおりです。

import java.awt.CardLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class FrameMain extends JFrame {

    final JPanel pnlShow;
    PanelHome pnlHome = new PanelHome();
    PanelPlayerInfo pnlPlayerInfo = new PanelPlayerInfo();
    PanelPlay pnlPlay = new PanelPlay(pnlPlayerInfo);
    PanelInstruction pnlInstructions = new PanelInstruction();
    PanelStore pnlStore = new PanelStore();
    PanelHighscores pnlHighscores = new PanelHighscores();
    ControlActionListenter CAL = new ControlActionListenter();

    public FrameMain() {
        pnlShow = new JPanel(new CardLayout());
        pnlShow.add(pnlHome, "Home");
        pnlShow.add(pnlPlay, "Play");
        pnlShow.add(pnlInstructions, "Instructions");
        pnlShow.add(pnlStore, "Store");
        pnlShow.add(pnlHighscores, "Highscores");
        pnlShow.add(pnlPlayerInfo, "PlayerInfo");

        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setTitle("TANKS");
        this.setVisible(true);
        this.setSize(806, 628);
        this.setResizable(false);
        this.add(pnlShow);
        this.addKeyListener(new Move());

        pnlHome.btnExit.addActionListener(CAL);
        pnlHome.btnExit.setActionCommand("Exit");
        pnlHome.btnPlay.addActionListener(CAL);
        pnlHome.btnPlay.setActionCommand("PlayerInfo");
        pnlHome.btnInst.addActionListener(CAL);
        pnlHome.btnInst.setActionCommand("Instructions");
        pnlHome.btnHigh.addActionListener(CAL);
        pnlHome.btnHigh.setActionCommand("Highscores");
        pnlInstructions.btnBack.addActionListener(CAL);
        pnlInstructions.btnBack.setActionCommand("Main");
        pnlPlay.pnlToolbar.btnHome.addActionListener(CAL);
        pnlPlay.pnlToolbar.btnHome.setActionCommand("Main");
        pnlHighscores.btnBack.addActionListener(CAL);
        pnlHighscores.btnBack.setActionCommand("Main");
        pnlPlayerInfo.btnPlay.addActionListener(CAL);
        pnlPlayerInfo.btnPlay.setActionCommand("Play");
        pnlPlayerInfo.btnBack.addActionListener(CAL);
        pnlPlayerInfo.btnBack.setActionCommand("Main");

    }

    class ControlActionListenter implements ActionListener {

        public void actionPerformed(ActionEvent e) {
            CardLayout cl = (CardLayout) (pnlShow.getLayout());
            String cmd = e.getActionCommand();

            if (cmd.equals("Main")) {
                cl.show(pnlShow, "Home");
            } else if (cmd.equals("Exit")) {
                System.exit(0);
            } else if (cmd.equals("Play")) {
                pnlPlay.arpPlayer[0].populateName(pnlPlayerInfo.txtPlayer1.getText());
                pnlPlay.arpPlayer[1].populateName(pnlPlayerInfo.txtPlayer2.getText());
                pnlPlay.pnlPlayer.lblPlayer1.setText(pnlPlay.arpPlayer[0].sPlayer);
                pnlPlay.pnlPlayer.lblPlayer2.setText(pnlPlay.arpPlayer[1].sPlayer);
                cl.show(pnlShow, "Play");
            } else if (cmd.equals("PlayerInfo")) {
                cl.show(pnlShow, "PlayerInfo");
            } else if (cmd.equals("Instructions")) {
                cl.show(pnlShow, "Instructions");
            } else if (cmd.equals("Highscores")) {
                cl.show(pnlShow, "Highscores");
            }
        }
    }

    class Move implements KeyListener {

        public void keyPressed(KeyEvent e) {
            System.out.println("rp");
        }

        public void keyTyped(KeyEvent e) {
            System.out.println("rp");
        }

        public void keyReleased(KeyEvent e) {
            System.out.println("rp");
        }
    }
}

フレームにキーリスナーを追加し、このキーリスナーを実装するクラスを作成しました。私が言ったように、私がしたいのは、キーボードのキーを押したときにプログラムに何かを出力させることだけです。他に何かお見せする必要がある場合はお知らせください。投稿します。

4

1 に答える 1

3

KeyListener全体ではなく、必要なコンポーネントに追加してみてくださいJFrame。そして、彼らが焦点を合わせていることを確認してください。

Also you may find How to Use Key Bindings useful, as an alternative to key listeners.

于 2012-04-30T17:44:53.033 に答える