Tin*_*des 4 java swing mouseevent mouselistener
我有一个JPanel由多个部分组成的它-就像一些JLabels,JTextBoxes,JComboBoxes,JCheckBoxes等.
如果用户将鼠标悬停在这些组件上3秒钟,我想显示一个弹出帮助窗口.
到目前为止,我添加了一个MouseListener到我的组件之一,它确实显示了所需的弹出和帮助.但是在3秒延迟后我无法实现它.一旦用户将鼠标移动到组件的该区域,弹出窗口就会显示.这非常令人讨厌,因为组件几乎无法使用.我尝试过使用MouseMotionListener并在mouseMoved(MouseEvent e)方法中使用以下代码.产生同样的效果.
有关如何实现鼠标悬停效果的任何建议 - 仅在延迟3秒后显示弹出窗口?
示例代码:(鼠标输入方法)
private JTextField _textHost = new JTextField();
this._textHost().addMouseListener(this);
@Override
public void mouseEntered(MouseEvent e) {
if(e.getSource() == this._textHost())
{
int reply = JOptionPane.showConfirmDialog(this, "Do you want to see the related help document?", "Show Help?", JOptionPane.YES_NO_OPTION);
if(reply == JOptionPane.YES_OPTION)
{
//Opens a browser with appropriate link.
this.get_configPanel().get_GUIApp().openBrowser("http://google.com");
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用Timerin mouseEntered().这是一个有效的例子:
public class Test {
private JFrame frame;
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
Test test = new Test();
test.createUI();
}
});
}
private void createUI() {
frame = new JFrame();
JLabel label = new JLabel("Test");
label.addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent me) {
startTimer();
}
});
frame.getContentPane().add(label);
frame.pack();
frame.setVisible(true);
}
private void startTimer() {
TimerTask task = new TimerTask() {
@Override
public void run() {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JOptionPane.showMessageDialog(frame, "Test");
}
});
}
};
Timer timer = new Timer(true);
timer.schedule(task, 3000);
}
}
Run Code Online (Sandbox Code Playgroud)