0

私はプログラミングの初心者なので、このコードを作成しようとしていて、部分的な出力が得られました。アプレットで入力された文字を印刷し、alt キーまたはシフト キーが押された場合、ステータス バーに表示する必要があります。問題は、アプレットに応答がないことですが、Alt キーまたは Shift キーを押すと、ステータス バーに適切な応答が表示されます。コードは次のとおりです。

import java.awt.*;
import java.applet.*;
import java.awt.event.*;

/* <applet code="MyKeyApplet.class"
           width = "400"
           height = "400">
   </applet>*/

public class MyKeyApplet extends Applet implements KeyListener{
    char ch;
    String str=" ";

    public void init(){
        this.addKeyListener(this);
        requestFocus();
    }

    public void keyPressed(KeyEvent k){
        int x = k.getKeyCode();
        if(x==KeyEvent.VK_SHIFT)
            showStatus("You pressed Shift Key");
        else if (x==KeyEvent.VK_ALT)
            showStatus("You pressed Alt Key");
    }

    public void paint(Graphics g){
        g.drawString(str,40,40);
    }

    public void keyTyped(KeyEvent k){
        ch=k.getKeyChar();
        str="You Pressed" + ch;
        repaint();
    }

    public void keyReleased(KeyEvent k){
    }

}   
4

1 に答える 1

0

自分でテストしたことはありませんが、この回答が役立つ場合があります: https://stackoverflow.com/a/12483507/877472

あなたのコードからわかることは、修飾キーの押下 (ctrl、alt、shift など) をチェックしているだけで、他のキーの状況を処理していないことです。繰り返しますが、私はこれをテストしていませんが、コードを変更して、2 つの別個の処理アクションを用意することをお勧めします。 . このようなもの:

public void keyPressed(KeyEvent k){
    int x = k.getKeyCode();
    if(x==KeyEvent.VK_SHIFT)
        showStatus("You pressed Shift Key");
    else if (x==KeyEvent.VK_ALT)
        showStatus("You pressed Alt Key");
    else
      str += k.getKeyChar(); // Add the pressed key to the string.
}

ところで、私はあなたのプログラムが何をすべきかについて 100% 明確ではありませんが、文字列を継続的に作成する予定がある場合は、StringBuffer クラスを使用するとパフォーマンスが向上する可能性があります。

于 2012-11-20T18:22:13.483 に答える