1

そのため、割り当て用に jTextbox とキーボードを作成する必要があります。入力中に、対応する jButton の色を変更する必要があります。

現在、実行すると、フォーカスは jTextbox にあり、入力はできますが、フォーカスをボタンに設定することはできません。

いくつかの助けをいただければ幸いです。ありがとうございました

private void aButtonKeyPressed(java.awt.event.KeyEvent evt) {
    if (evt.getKeyCode() == KeyEvent.VK_A)
    {
       aButton.setBackground(Color.red);           
    } 
}

private void aButtonKeyReleased(java.awt.event.KeyEvent evt) {
    if (evt.getKeyCode() == KeyEvent.VK_A)
    {
        aButton.setBackground(Color.LIGHT_GRAY);
    }
}

private void sButtonKeyPressed(java.awt.event.KeyEvent evt) {
    if (evt.getKeyCode() == KeyEvent.VK_S)
    {
       sButton.setBackground(Color.red);           
    }
}

private void sButtonKeyReleased(java.awt.event.KeyEvent evt) {
    if (evt.getKeyCode() == KeyEvent.VK_S)
    {
       sButton.setBackground(Color.LIGHT_GRAY);           
    }
}
4

3 に答える 3

2

KeyListener を実装する共通クラスを用意し、そのクラスを JButton に渡します。

キーコードと JButton を格納するマップを用意する

Map<Integer, JButton> keyCodeButtonMap = new HashMap<Integer, JButton>();
keyCodeButtonMap.put(KeyEvent.VK_A, aButton); // Example

すべての KeyEvent 仮想キーを正しいボタンと共にマップに追加します。

private void buttonKeyPressed(java.awt.event.KeyEvent evt) {
    keyCodeButtonMap.get(evt.getKeyCode()).setBackground(Color.RED);
    keyCodeButtonMap.get(evt.getKeyCode()).setForeground(Color.RED);
}

private void buttonKeyReleased(java.awt.event.KeyEvent evt) {
    keyCodeButtonMap.get(evt.getKeyCode()).setBackground(Color.LIGHT_GRAY);
    keyCodeButtonMap.get(evt.getKeyCode()).setForeground(Color.LIGHT_GRAY);
}

これは理想的には機能するはずです。

于 2012-12-12T06:23:22.090 に答える
1

おそらく、特定の文字が入力されたときに色を変更してクリックさせたいですかJButtonJTextAreaJTextField

これが私が作った例です:

ここに画像の説明を入力

.押されると、ボタンの背景が青に変わります (そしてSPACE、'.' の後に自動挿入するボタン メソッドが呼び出されます)。

ここに画像の説明を入力

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;

public class Test {

    final JFrame frame = new JFrame();
    final JTextField jtf = new JTextField(15);
    final JButton button = new JButton("SPACE");

    public Test() {
        initComponents();
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Test();
            }
        });
    }

    private void initComponents() {

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                insertSpace();
            }
        });

        final Color defaultColor = button.getBackground();

        jtf.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_PERIOD, 0, true), "period rel");
        jtf.getActionMap().put("period rel", new AbstractAction() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                //button.doClick(); //I dont like this as it makes JBUtton look like its being clicked where as we want a color change
                insertSpace();
                button.setBackground(defaultColor);
            }
        });

        jtf.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_PERIOD, 0), "period pressed");
        jtf.getActionMap().put("period pressed", new AbstractAction() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                button.setBackground(Color.CYAN);
            }
        });

        frame.add(jtf, BorderLayout.NORTH);
        frame.add(button, BorderLayout.SOUTH);

        frame.pack();
        frame.setVisible(true);
    }

    private void insertSpace() {
        String s = jtf.getText();
        jtf.setText(s + " ");
    }
}
于 2012-12-12T07:25:13.103 に答える
0

KeyBindingsを見たいと思うかもしれません。
しかし、本当に KeyListener が必要な場合は、これを試してください。

    yourJtextField.addKeyListener(new KeyAdapter() {

       @Override
       public void keyPressed(KeyEvent e){
          if( e.getKeyCode() == KeyEvent.VK_A ){
             aButton.setBackground(yourColor);
          }
       }

       @Override
       public void keyReleased(KeyEvent e){
          aButton.setBackground(yourDefaultColor);
       }

    });

于 2012-12-12T06:22:49.933 に答える