Как подключить JButton к клавише «ВВОД»? - PullRequest
0 голосов
/ 24 января 2020

Понятия не имею, как подключить JButton "b" к клавише "ENTER"?

Java

b=new JButton(icon);
b.setBounds(285, 50, 40, 30);

b.addActionListener(new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
        String ip;
        String url=tf.getText();

        try {
            ip=java.net.InetAddress.getByName(url).getHostAddress();
            l2.setText("IP address:"+ip);
        } catch (UnknownHostException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }  

    }
});
add(b);

Ответы [ 2 ]

0 голосов
/ 24 января 2020

Вы можете просто повторно связать ключевые действия. По умолчанию ButtonUI использует клавишу «SPACE» для вызова действия. Вот пример:

import java.awt.event.KeyEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;

/**
 * <code>ButtonKeyTest</code>.
 */
public class ButtonKeyTest {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new ButtonKeyTest()::startUp);
    }

    private void startUp() {
        JButton b = new JButton("Use Enter Luke!");
        b.addActionListener(e -> JOptionPane.showMessageDialog(b, "Yeah!"));
        // rebind "space" action to "enter" for key pressed event
        Object actId = b.getInputMap().get(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0));
        b.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), actId);
        // rebind "space" action to "enter" for key released event
        actId = b.getInputMap().get(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0, true));
        b.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0, true), actId);
        // end rebind

        // alternative
        // b.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "pressed");
        // b.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0, true), "released");

        JPanel p = new JPanel();
        p.add(b);
        JFrame frm = new JFrame("Button");
        frm.add(p);
        frm.setSize(200, 100);
        frm.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frm.setLocationRelativeTo(null);
        frm.setVisible(true);
    }
}

Более подробную информацию о привязках клавиш вы можете прочитать здесь .

0 голосов
/ 24 января 2020

Вам нужно добавить KeyListener вместо ActionListener и проверить KeyEvent e с int keyCode = e.getKeyCode(). Вот правильный пример:

private JButton button;

public Foo() {
    button = new JButton("click");
    // frame settings - width/height etc.
    this.add(button);

    button.addKeyListener(new KeyListener() {
        @Override
        public void keyTyped(KeyEvent e) {
            // your logic here
        }

        @Override
        public void keyPressed(KeyEvent e) {
            int keyCode = e.getKeyCode();
            if (keyCode == KeyEvent.VK_ENTER) {
                System.out.println("ENTER PRESSED");
            }
        }

        @Override
        public void keyReleased(KeyEvent e) {
            // your logic here
        }
    });

}

PS : это не очень хороший подход - добавить ключевой слушатель на кнопку (имя говорит об этом, ключевой слушатель должен быть добавлен на тип ввода - textarea, textfield et c.).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...