joey leavell
joey leavell

Reputation: 93

JPanel fire input event

Is there a way to fire an input event (eg click, mouse move, typing) into a JPanel (or any component) programatically? Eg:

if(x=7)
    click(400,500,panel)

Upvotes: 0

Views: 112

Answers (1)

camickr
camickr

Reputation: 324098

You can invoke dispatchEvent(...) on the component.

The following demonstrates how a MouseEvent and a KeyEvent can be dispatched to the component to display the tool tip:

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

public class PostTipSSCCE extends JPanel
{
    public PostTipSSCCE()
    {
        FocusAdapter fa = new FocusAdapter()
        {
            public void focusGained(FocusEvent e)
            {
                JComponent component = (JComponent)e.getSource();

                MouseEvent phantom = new MouseEvent(
                    component,
                    MouseEvent.MOUSE_MOVED,
                    System.currentTimeMillis(),
                    0,
                    10,
                    10,
                    0,
                    false);

                ToolTipManager.sharedInstance().mouseMoved(phantom);
            }
        };

        MouseAdapter ma = new MouseAdapter()
        {
            @Override
            public void mouseEntered(MouseEvent e)
            {
                JComponent component = (JComponent)e.getSource();

                KeyEvent ke = new KeyEvent(
                    component,
                    KeyEvent.KEY_PRESSED,
                    System.currentTimeMillis(),
                    KeyEvent.CTRL_MASK,
                    KeyEvent.VK_F1,
                    KeyEvent.CHAR_UNDEFINED);

                component.dispatchEvent( ke );
            }
        };

        JButton button = new JButton("Button");
        button.setToolTipText("button tool tip");
        button.addFocusListener( fa );
        button.addMouseListener( ma );
        add( button );

        JTextField textField = new JTextField(10);
        textField.setToolTipText("text field tool tip");
        textField.addFocusListener( fa );
        textField.addMouseListener( ma );
        add( textField );

        JCheckBox checkBox =  new JCheckBox("CheckBox");
        checkBox.setToolTipText("checkbox tool tip");
        checkBox.addFocusListener( fa );
        checkBox.addMouseListener( ma );
        add( checkBox );
    }

    private static void createAndShowUI()
    {
        JFrame frame = new JFrame("PostTipSSCCE");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add( new JScrollPane(new PostTipSSCCE()) );
        frame.pack();
        frame.setLocationByPlatform( true );
        frame.setVisible( true );
    }

    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowUI();
            }
        });
    }
}

Upvotes: 1

Related Questions