0

私はJavaを初めて使用し、プログラムの最後の1つを理解しようとしています。

これは私がコーディングしたプログラムであり、レイアウトを使用すればまったく問題ありません。

ここに画像の説明を入力してください

今、私のプログラムは、キーボードでボタンを押すたびにボタンを強調表示することを想定しています(画面のボタンを押すことではありません)

実行する必要のあるアクションは、を入力するときなので、何を使用する必要があるのか​​わかりませんJTextArea。私はで使用しようとしてKeyEventKeyPressedますが、実際には機能しないため、それが正しいことかどうかはわかりません。

これは課題であり、クラスメートの一部がここで見つけた場合にグーグルで使用したくないため、現時点ではコードをここに投稿できません。(笑)

ここで必要なのは私のコードです:)

import javax.swing.*; // import all javax.swing
import java.awt.*; // import all java.awt
import java.awt.event.*;

public class Sample extends JFrame implements KeyListener { // start of the
                                                            // class

    private JTextArea field = new JTextArea(10,15); // create an instance of
                                                        // JTextField
    private JPanel mainPanel = new JPanel(); // create an instance of JPanel
    private JPanel TopFieldPan = new JPanel();
    private JPanel MainBtnsPan = new JPanel();
    private JPanel FifthRowPan = new JPanel();

    JPanel fifthBtn = new JPanel();

    private static JButton Space = new JButton("");

    public Sample() { // start of the weather constructor

        Space.setPreferredSize(new Dimension(280, 45));
        fifthBtn.add(Space);


        TopFieldPan.add(field);

        FifthRowPan.setLayout(new BoxLayout(FifthRowPan, BoxLayout.X_AXIS));
        FifthRowPan.add(fifthBtn);
        MainBtnsPan.setLayout(new GridLayout(5, 5, 0, 0));

        MainBtnsPan.add(FifthRowPan);

        mainPanel.add(TopFieldPan);
        mainPanel.add(MainBtnsPan);

        this.add(mainPanel);

        Space.setSelected(true);
        field.addKeyListener(this); // important !!!

        setTitle("Typing Tutor"); // set the title to the frame
        setSize(300, 300); // set the fixed size
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        setLocationRelativeTo(null); 
        setVisible(true); // make it visible

    } // ends of the constructor

    public void keyPressed(KeyEvent e) {

        if (e.getKeyCode() == KeyEvent.VK_SHIFT) {
            Space.setBackground(Color.green);

        }


    }

    public void keyReleased(KeyEvent evt) {
        Space.setBackground(null);
    }

    public void keyTyped(KeyEvent evt) {
        // TODO Auto-generated method stub

        if(evt.getKeyChar() == 'a' || evt.getKeyChar() ==  'A')
        {
            Space.setBackground(Color.green);
        }
        else if(evt.getKeyChar() == 'b' || evt.getKeyChar() == 'B')
        {
            Space.setBackground(Color.red);
        }       
    }

    public static void main(String[] args) { // start of the main method

        new Sample();

    } // ends of main method

} // ends of class

コードをできるだけ単純化しようとしましたが、これが最後のコードです。

だから私は私が押すときにそれを作ろうとしています、aさもなければAそれはそのスペースJButtonを強調するはずです。

4

2 に答える 2

2

次のように、ボタンとそれらがマップされるキーのマップを作成します。

Map<String, JButton> buttonMap = new HashMap<String, Button>();

次に、ボタンを追加するときに、次のようにボタンをマップに追加します。

buttonMap.put(FirstRow[i].toLowerCase(), btn);

次に、次のようなものをKeyTypedに追加します。

public void keyTyped(KeyEvent evt) {
    String keyPressed = new String(""+evt.getKeyChar()).toLowerCase();
    JButton tmp = buttonMap.get(keyPressed);
    if(null != tmp){
        tmp.doClick();
    }
}

行1と2のコードに対してこれをすばやく実行しました。特別なキーで機能させるには、コードをいじくり回す必要がありますが、目的の場所に到達するはずです。

答えを小さくするために、ここに貼り付けました。 http://pastebin.com/t1v8d6Hi

于 2013-03-26T00:08:57.137 に答える
1

コードは最初のパスで問題ないように見えます。KeyListenerで機能する基本的なメカニズムが整っているようです。ボタンのマウスクリックを停止する方法を考える必要があるかもしれません。JButton.setEnabled(false)は機能しますが、ボタンの描画方法を変更するため、paintメソッドをオーバーライドする必要がある場合があります。キーリスナーを1つのコンポーネントに接続するだけで、ウィンドウはすべてのイベント、フォーカスがある場合はテキスト領域を取得します。あなたが持っている主なタスクは、キーが押されたイベントをボタンにマップする方法を理解することです。おそらく、ハッシュマップなどを使用して、キーが文字コードであるJButtonを格納しますか?

于 2013-03-25T23:57:07.750 に答える