Как я могу проверить, нажимает ли пользователь определенную клавишу, т. Е. Клавишу Ввода, такую как модуль клавиатуры python?

#java #swing #awt #keylistener

Вопрос:

Я работаю над созданием приложения для чата с графическим интерфейсом на Java (я знаю, что это слишком амбициозно), которое просто отправляет сообщение в подключенную комнату. Я еще не занимался сетевыми вещами, но просто использовал графический интерфейс с голыми костями. У меня есть текстовое поле, в котором будет вводиться сообщение, и текстовая область, в которую будет отправлено отправленное сообщение с кнопкой для его отправки. Я хочу, чтобы при нажатии клавиши enter выполнялась задача отправки. Мой код таков

 import javax.swing.*;
import java.awt.*;

public class Jabba {
    //Class
    public static void main(String args[]) {
    //Main Method
        //main frame
        JFrame frame = new JFrame("Chat Frame");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400, 400);

        //The Menu that will later allow us to connect and create rooms to join a chat
        JMenuBar mb = new JMenuBar();
        JMenu m1 = new JMenu("Connect");
        JMenu m2 = new JMenu("Help");
        //This is for help
        mb.add(m1);
        mb.add(m2);
        JMenuItem m11 = new JMenuItem("Create new room");
        JMenuItem m22 = new JMenuItem("Join an Existing Room");
        m1.add(m11);
        m1.add(m22);

        //Our panel
        JPanel panel = new JPanel();
        
        JLabel label = new JLabel("Enter Text");
        //The Message field
        JTextField tf = new JTextField(15);
        //The Sending button
        JButton send = new JButton("Send");
        
        
        //The resetting button
        JButton reset = new JButton("Reset");
        //Adding the panel
        panel.add(label); 
        panel.add(tf);
        panel.add(send);
        panel.add(reset);

        //The text area where the messages will go
        JTextArea ta = new JTextArea();
        //Adding it to the Scroll Pane so that It has scrolls
        JScrollPane sp = new JScrollPane(ta);
        
        //Actionlisteners allow us to listen to the actions that take place with 
        //The Specific components like here when the button is pressed
        send.addActionListener(e ->{
            //It will first store the text of the the text field in a
            //variable called msg
            String msg = tf.getText();  
            //Then Will remove the Text from the field so that new messages can be 
            //sent
            tf.setText(null);
            //Now it will send The message to the message text area
            ta.append(msg "n");
            });
        reset.addActionListener(e ->{
            //This is for the reset option
                ta.setText(null);
            //It will jus set all the text of the message area to null
            //i.e. Nothing
        }
        );  
        
        //adds all the content and components to the main frame.
        frame.getContentPane().add(BorderLayout.SOUTH, panel);
        frame.getContentPane().add(BorderLayout.NORTH, mb);
        /*notice the BorderLayout here, it is from the awt package and it 
        is letting us lay the components in a specific layout. 
        Also we have changed the component below after the center to sp
        i.e. it is the scrollpane instead of our textarea to get the Scroll Bars!!*/
        frame.getContentPane().add(BorderLayout.CENTER, sp);
        frame.setVisible(true);
        //Pretty Self-Explanatory
    }
}

 

введите описание изображения здесь
Пожалуйста, помогите мне и простите, если я неправильно задал вопрос, так как я не совсем понял, как использовать классы KeyListener…## Заголовок ##

Комментарии:

1. Я бы рекомендовал прикрепить ActionListener его к JTextField , возможно, используя экземпляр, который send использует кнопка. Дополнительные сведения см. в разделе Использование текстовых полей и Написание прослушивателя действий

Ответ №1:

Итак, как сказал мне Безумный программист и помог мне, я использовал Прослушиватель действий в этом текстовом поле и скопировал код, который я использовал для отправки сообщения, в прослушиватель действий для текстового поля var tf. Так что в псевдокоде это:

 tf.addActionListener(e ->{
            String msg = tf.getText();
            tf.setText(null);
            ta.append(msg "n");
        });
 

Комментарии:

1. Создайте Action . Затем вы можете добавить один и тот же экземпляр действия в поле JTextField и в кнопку JButton. Для получения дополнительной информации прочитайте раздел из руководства Swing о том, как использовать действия . Или, если вы собираетесь использовать лямбда-код, вам следует создать метод, который может быть вызван из обоих компонентов, чтобы вы не повторяли код.