您的位置:首页 > 编程语言 > Java开发

Java Swing,模拟事件驱动

2009-07-16 08:26 399 查看
EventQueue queue = Toolkit.getDefaultToolkit().getSystemEventQueue();

queue.postEvent(new ActionEvent(CloseButton, ActionEvent.ACTION_PERFORMED, "close"));

ActionEvent can be replaced by MouseEvent below:

MouseEvent(btn,MouseEvent.MOUSE_RELEASED,0,MouseEvent.BUTTON1_MASK,1,1,1,false);

There is better way to simulate Event in JAVA, that is Robot. Using it to capture screen and simulate mouse/keyboard event. Below is an example to implement them which are mess and simple, but experienced programer should be able to understand it easily.

import java.awt.AWTException;

import java.awt.BorderLayout;

import java.awt.Dimension;

import java.awt.MouseInfo;

import java.awt.Point;

import java.awt.Rectangle;

import java.awt.Robot;

import java.awt.Toolkit;

import java.awt.event.InputEvent;

import java.awt.event.KeyEvent;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.IOException;

import javax.imageio.ImageIO;

import javax.swing.ImageIcon;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JTextField;

import javax.swing.SpringLayout;

import javax.swing.SwingUtilities;

public class TestRobot extends JFrame{

private static final long serialVersionUID = -2685546878836679111L;

private static File file = new File("Test11.png"); //Declare file

private JLabel image = new JLabel();

private JButton begin = new JButton("Begin");

private JTextField jtf = new JTextField(" ");

public TestRobot(){

this.getContentPane().setLayout(new BorderLayout());

try {

image.setIcon(new ImageIcon(ImageIO.read(file)));

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

SpringLayout layout = new SpringLayout();

JPanel beginP = new JPanel();

beginP.setLayout(layout);

beginP.add(begin);

JLabel label = new JLabel("Auto Filled: ");

beginP.add(label);

beginP.add(jtf);

jtf.setSize(100, 25);

layout.putConstraint(SpringLayout.WEST, begin, 5, SpringLayout.WEST, beginP);

layout.putConstraint(SpringLayout.NORTH, begin, 5, SpringLayout.NORTH, beginP);

layout.putConstraint(SpringLayout.WEST, label, 5, SpringLayout.EAST, begin);

layout.putConstraint(SpringLayout.NORTH, label, 5, SpringLayout.NORTH, beginP);

layout.putConstraint(SpringLayout.WEST, jtf, 0, SpringLayout.EAST, label);

layout.putConstraint(SpringLayout.NORTH, jtf, 5, SpringLayout.NORTH, beginP);

this.getContentPane().add(new JLabel(), BorderLayout.LINE_START);

this.getContentPane().add(image, BorderLayout.PAGE_START);

this.getContentPane().add(beginP);

this.setSize(300,300);

Dimension d = Toolkit.getDefaultToolkit().getScreenSize();

this.setLocation(((int)d.getWidth() - 300)/2, ((int)d.getHeight() - 300)/2);

this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);

}

public static void main(String[] args){

final Robot robot;

try {

robot = new Robot();

//1. Capture Screen, it can be used as remote monitoring.

BufferedImage image = robot.createScreenCapture(new Rectangle(0,0,300,200));

ImageIO.write(image, "png", file);

final TestRobot test = new TestRobot();

SwingUtilities.invokeLater(new Runnable(){

public void run() {

test.setVisible(true);

}

});

//Move mouse point

robot.delay(2000);

Point p = test.begin.getLocationOnScreen();

p.x = p.x + test.begin.getSize().width/2;

p.y = p.y + test.begin.getSize().height/2;

Point mp = MouseInfo.getPointerInfo().getLocation();

for(;mp.x != p.x || mp.y != p.y;){

robot.delay(10);

if(mp.x > p.x){

mp.x--;

}else if(mp.x < p.x){

mp.x++;

}

if(mp.y > p.y){

mp.y--;

}else if(mp.y < p.y){

mp.y++;

}

robot.mouseMove(mp.x, mp.y);

}

//

robot.mousePress(InputEvent.BUTTON1_MASK);

robot.delay(200);

robot.mouseRelease(InputEvent.BUTTON1_MASK);

robot.delay(200);

//Request focus for TextField

test.jtf.requestFocus();

robot.delay(200);

robot.keyPress(KeyEvent.VK_SHIFT);

robot.keyPress(KeyEvent.VK_H);

robot.delay(200);

robot.keyRelease(KeyEvent.VK_H);

robot.keyRelease(KeyEvent.VK_SHIFT);

robot.delay(200);

robot.keyPress(KeyEvent.VK_E);

robot.delay(200);

robot.keyRelease(KeyEvent.VK_E);

robot.delay(200);

robot.keyPress(KeyEvent.VK_L);

robot.delay(200);

robot.keyRelease(KeyEvent.VK_L);

robot.delay(200);

robot.keyPress(KeyEvent.VK_L);

robot.delay(200);

robot.keyRelease(KeyEvent.VK_L);

robot.delay(200);

robot.keyPress(KeyEvent.VK_O);

robot.delay(200);

robot.keyRelease(KeyEvent.VK_O);

robot.delay(200);

robot.keyPress(KeyEvent.VK_COMMA);

robot.delay(200);

robot.keyRelease(KeyEvent.VK_COMMA);

robot.delay(200);

robot.keyPress(KeyEvent.VK_W);

robot.delay(200);

robot.keyRelease(KeyEvent.VK_W);

robot.delay(200);

robot.keyPress(KeyEvent.VK_O);

robot.delay(200);

robot.keyRelease(KeyEvent.VK_O);

robot.delay(200);

robot.keyPress(KeyEvent.VK_R);

robot.delay(200);

robot.keyRelease(KeyEvent.VK_R);

robot.delay(200);

robot.keyPress(KeyEvent.VK_L);

robot.delay(200);

robot.keyRelease(KeyEvent.VK_L);

robot.delay(200);

robot.keyPress(KeyEvent.VK_D);

robot.delay(200);

robot.keyRelease(KeyEvent.VK_D);

robot.delay(200);

robot.keyPress(KeyEvent.VK_SHIFT);

robot.keyPress(KeyEvent.VK_1);

robot.delay(200);

robot.keyRelease(KeyEvent.VK_1);

robot.keyRelease(KeyEvent.VK_SHIFT);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (AWTException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: