0

問題:

ゲーム用にいくつかの GUI 要素 (ボタン) を書きました。しかし、KeyListenerが機能していないため、TextFieldの作成に行き詰まっています。KeyListener を実装しようとしましたが、うまくいきませんでした。
私は何をすべきか?

リンク:

ゲーム(終了)

コード:

public class TextField extends GUI implements KeyListener {
    private boolean focused = false;
    private String text = "";

    public TextField(int x, int y, int width, int height) {
        super(x, y, width, height);
    }

    public boolean isFocused() {
        return focused;
    }

    public void setFocused(boolean focused) {
        this.focused = focused;
    }

    public void append(String text) {
        this.text = this.text + text;
    }

    public void delete() {
        if (text.length() > 0) {
            text = text.substring(0, text.length() - 1);
        }
    }

    @Override
    public void render(GameContainer gc, Graphics g) {
        if (!focused) {
            g.setColor(Color.gray);
        } else {
            g.setColor(Color.orange);
        }
        g.fillRect(x - width / 2, y - height / 2, width, height);

        g.setColor(Color.darkGray);
        g.fillRect(x - width / 2 + 5, y - height / 2 + 5, width - 10, height - 10);

        g.setColor(Color.white);
        g.drawString(text, x - g.getFont().getWidth(text) / 2, y - g.getFont().getHeight(text) / 2);
    }

    @Override
    public void setInput(Input input) {
    }

    @Override
    public boolean isAcceptingInput() {
        return false;
    }

    @Override
    public void inputEnded() {
    }

    @Override
    public void inputStarted() {
    }

    @Override
    public void keyPressed(int i, char c) {
        System.out.println("This is not working");
    }

    @Override
    public void keyReleased(int i, char c) {
    }
}

これは、TextField を作成する方法です。

ipField = new TextField(width / 2, height / 2 - 60, 200, 50);
ipField.add(new ActionHandler() {
    @Override
    public void pressed() {
        ipField.setFocused(true);
    }

    @Override
    public void hover() {
    }

    @Override
    public void notHover() {
        if (input.isMousePressed(0)) {
            ipField.setFocused(false);
        }
    }
});
guiManager.add(ipField);

**これには、組み込みの TextField を使用できることがわかりました:*

org.newdawn.slick.gui.TextField
4

1 に答える 1

1

JavaDoc を参照すると、KeyListenerメソッドの構文は次のとおりです。

void keyPressed(KeyEvent e)
void keyReleased(KeyEvent e)
void keyTyped(KeyEvent e)

コードを調べると、構文は次のとおりです。
public void keyPressed(int i, char c)
public void keyReleased(int i, char c)

これは、コンパイル時にエラーとしてフラグが立てられます。

また、理想的には、イベント用に別のハンドラ クラスを作成する必要があります。イベントを生成する
TextFieldオブジェクトであり、それをリッスンする人が必要です。メソッドを呼び出し、ハンドラー クラスのオブジェクトを引数として渡すことで 、リッスンするユーザーを指定する必要があります。addKeyListener()

PS: Swing に切り替えます。代わりに JTextField を使用してください

参照: http://docs.oracle.com/javase/6/docs/api/java/awt/event/KeyListener.html
チュートリアル: http://docs.oracle.com/javase/tutorial/uiswing/events/keylistener .html
イベント委任モデル: http://wiki.answers.com/Q/What_is_delegation_event_model_in_java
スイングの利点: https://softwareengineering.stackexchange.com/questions/112482/advantage-of-using-swing-over-awt

于 2013-04-21T18:31:35.173 に答える