输入鼠标后如何将KeyListener添加到JComponent? [英] How to add KeyListener to JComponent when mouse is entered?
问题描述
我创建了自定义按钮类,该类扩展了JComponent
,并希望在mouseEntered
事件上添加KeyListener
(后来在mouseExited
上删除).因此,我的目标是-当鼠标进入此JComponent
时-如果我按Enter键,将执行一些仅与此按钮有关的代码.我该怎么办?
I have created custom button class which extends JComponent
and want to add KeyListener
on mouseEntered
event (and later remove on mouseExited
). So my goal is - when the mouse enters this JComponent
- then if I press Enter - some code will be executed, related to only this button. How can I do that?
推荐答案
Use Key Bindings instead of KeyListeners, since the latter is way to low level for Swing
. Just bring your mouse over the JButton
, and then press ENTER, then take your mouse outside the bounds of the JButton
and try pressing ENTER again. Have a look at this example and see if this is what you wanted :
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ButtonBinding {
private JPanel contentPane;
private JTextField tField;
private JButton button;
private KeyStroke keyStroke = KeyStroke.getKeyStroke("ENTER");
private Action action = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent ae) {
System.out.println("Action Performed");
contentPane.setBackground(Color.BLUE);
}
};
private MouseAdapter mouseActions = new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent me) {
System.out.println("Mouse Entered");
JButton button = (JButton) me.getSource();
button.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(keyStroke, "enter");
button.getActionMap().put("enter", action);
}
@Override
public void mouseExited(MouseEvent me) {
System.out.println("Mouse Exited");
JButton button = (JButton) me.getSource();
button.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(keyStroke, "none");
contentPane.setBackground(Color.RED);
}
};
private void displayGUI() {
JFrame frame = new JFrame("Button Binding Example");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
contentPane = new JPanel();
contentPane.setOpaque(true);
tField = new JTextField(10);
button = new JButton("Click Me");
button.addMouseListener(mouseActions);
contentPane.add(tField);
contentPane.add(button);
frame.setContentPane(contentPane);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
Runnable runnable = new Runnable() {
@Override
public void run() {
new ButtonBinding().displayGUI();
}
};
EventQueue.invokeLater(runnable);
}
}
这篇关于输入鼠标后如何将KeyListener添加到JComponent?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!