Слушатель, который запускает определенный код только при нажатии клавиши ENTER, когда мышь находится в JTextField? - PullRequest
0 голосов
/ 31 мая 2018

здесь код нажатой клавиши ENTER и мыши в TextField отдельно.Мне нужно, чтобы программа запускала мой код только тогда, когда мышь находится внутри JTextField, пока нажата клавиша ENTER.Спасибо за любую помощь!

Строка - это то, что я назвал JTextField. Что программа делает, это берет строку, а затем отображает ее реверс при нажатии кнопки JButton, или когда мышь находится в поле JField, когда нажата клавиша ENTER.

string.addActionListener (новый ActionListener () {

    public void actionPerformed(ActionEvent e){

        String word = string.getText();
        String reversed = "";

        char[] letters = word.toCharArray();

        for (int i = letters.length-1; i>=0; i--) {
            reversed = reversed + letters[i];
        }

        reversed.trim();
        reverseStr.setText(reversed);


    }

    });

string.addMouseListener(new MouseListener() {

    public void mouseEntered(MouseEvent arg0) {


        String word = string.getText();
        String reversed = "";

        char[] letters = word.toCharArray();

        for (int i = letters.length-1; i>=0; i--) {
            reversed = reversed + letters[i];
        }

        reversed.trim();
        reverseStr.setText(reversed);

    }


    public void mouseClicked(MouseEvent arg0) {
        }

    @Override
    public void mouseExited(MouseEvent arg0) {
        }

    @Override
    public void mousePressed(MouseEvent arg0) {
    }

    @Override
    public void mouseReleased(MouseEvent arg0) {
    }

});

1 Ответ

0 голосов
/ 31 мая 2018

Вы можете определить поле, чтобы проверить, находится ли мышь в текстовом поле.Затем пусть код запускается, когда нажата клавиша ENTER и когда это поле имеет значение true.

. Посмотрите на этот код:

package test;

import java.awt.BorderLayout;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class Test extends JFrame {
    private static final long serialVersionUID = -3677708759387911324L;
    private boolean mouseInField = false;

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            new Test().setVisible(true);
        });
    }

    public Test() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(300, 300);
        JTextField textField = new JTextField(15);
        getContentPane().add(textField, BorderLayout.PAGE_START);
        textField.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseEntered(MouseEvent e) {
                mouseInField = true;
                System.out.println("mouse entered");
            }

            @Override
            public void mouseExited(MouseEvent e) {
                mouseInField = false;
                System.out.println("mouse exited");
            }
        });
        textField.addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
                if (e.getKeyCode() == KeyEvent.VK_ENTER && mouseInField)
                    System.out.println("enter is pressed while mouse is in text field.");
            }
        });
    }
}
...