只有在鼠标位于JTextField时按下ENTER键时才运行某个代码的侦听器?

时间:2018-05-31 00:42:03

标签: user-interface listener jtextfield

这里是按下的ENTER键和TextField中的鼠标的代码。我需要的是程序只在按下ENTER键时鼠标位于JTextField内部时才运行我的代码。谢谢你的帮助!

string是我命名为JTextField的 该程序所做的是获取一个String,然后在单击JButton时显示其反向,或者在按下ENTER时鼠标位于JField中。

string.addActionListener(new 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 :(得分:0)

您可以定义一个字段,以检查鼠标是否在文本字段中。然后在按下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.");
            }
        });
    }
}