刚学java不久,基础也不扎实,自己编了个小程序,希望实现以下功能
1.放大鼠标指向位置的屏幕图像和该点的颜色,坐标信息,显示在窗口上
2.通过按键,读取鼠标指向点的颜色,坐标,显示在窗口上我用了个按键监听器和一个读取鼠标所在点信息的线程
但发现第二个功能实现不了,我估计是线程方面的错,麻烦高手指点迷津!!!程序运行的图片:代码是这样的:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;public class Magnifier extends JFrame
{
private JPanel magnifierPanel;//显示屏幕图片的
private JPanel showMessagePanel;//显示鼠标指向点信息的
private JPanel getCPanel;// private JLabel label1[];//显示信息用的
private JLabel label2[];
private JButton label3[];
private JLabel label4[]; private Color color=Color.white;//存储颜色用的
private int mouseX,mouseY;//存储鼠标所在点坐标的
private Image screenImage;//存储鼠标指向点周围局部图片 public Magnifier()
{
super("放大镜"); magnifierPanel=new JPanel();
Border b1=BorderFactory.createEtchedBorder();
Border b2=BorderFactory.createTitledBorder(b1,"放大镜");
magnifierPanel.setBounds(10,5,90,105);
magnifierPanel.setBorder(BorderFactory.createCompoundBorder (b2, b1)); showMessagePanel=new JPanel();
showMessagePanel.setLayout(new GridLayout(6,1,1,3));
showMessagePanel.setBounds(110,5,190,105);
showMessagePanel.setBorder (BorderFactory.createEmptyBorder (5,5,5,5));
label1=new JLabel[6];
label1[5]=new JLabel("坐标值");
label1[0]=new JLabel("X:");
label1[1]=new JLabel("Y:");
label1[2]=new JLabel("R:");
label1[3]=new JLabel("G:");
label1[4]=new JLabel("B:");
showMessagePanel.add(label1[5]);
showMessagePanel.add(label1[0]);
showMessagePanel.add(label1[1]);
showMessagePanel.add(label1[2]);
showMessagePanel.add(label1[3]);
showMessagePanel.add(label1[4]); getCPanel=new JPanel();
getCPanel.setBorder(BorderFactory.createTitledBorder(b1,"坐标值------颜色-------抓取热键"));
getCPanel.setBounds(10,120,190,105);
getCPanel.setLayout(new GridLayout(3,3,3,3));
label2=new JLabel[3];
label3=new JButton[3];
label4=new JLabel[3];
label2[0]=new JLabel("0,0");
label2[0].setBorder(BorderFactory.createLoweredBevelBorder());
label2[1]=new JLabel("0,0");
label2[1].setBorder(BorderFactory.createLoweredBevelBorder());
label2[2]=new JLabel("0,0");
label2[2].setBorder(BorderFactory.createLoweredBevelBorder());
label3[0]=new JButton();
label3[0].setBackground(color);
label3[0].setBorder(BorderFactory.createLineBorder(Color.black, 1));
label3[1]=new JButton();
label3[1].setBackground(color);
label3[1].setBorder(BorderFactory.createLineBorder(Color.black, 1));
label3[2]=new JButton();
label3[2].setBackground(color);
label3[2].setBorder(BorderFactory.createLineBorder(Color.black, 1));
label4[0]=new JLabel("     Z");
label4[1]=new JLabel("     X");
label4[2]=new JLabel("     C");
getCPanel.add(label2[0]);
getCPanel.add(label3[0]);
getCPanel.add(label4[0]);
getCPanel.add(label2[1]);
getCPanel.add(label3[1]);
getCPanel.add(label4[1]);
getCPanel.add(label2[2]);
getCPanel.add(label3[2]);
getCPanel.add(label4[2]); getContentPane();
setLayout(null);
add(magnifierPanel);
add(showMessagePanel);
add(getCPanel);
addKeyListener(new KeyAdapter()//添加按键监听器
{
public void keyPressed(KeyEvent e)
{
if(e.getKeyCode()==KeyEvent.VK_Z)
{
label2[0].setText(mouseX+","+mouseY);
label3[0].setBackground(color);
}
else if(e.getKeyCode()==KeyEvent.VK_X)
{
label2[1].setText(mouseX+","+mouseY);
label3[1].setBackground(color);
}
else if(e.getKeyCode()==KeyEvent.VK_C)
{
label2[3].setText(mouseX+","+mouseY);
label3[3].setBackground(color);
}
repaint(); }
});
setSize(220,270);
setVisible(true); new MouseMove();//建一个线程
}
public void paint(Graphics g)
{
g.drawImage(screenImage,21,58,75,75,this);
}
public static void main(String[] args)
{
Magnifier magnifier=new Magnifier();
magnifier.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
class MouseMove extends Thread
{
private Robot robot;
public MouseMove()
{
super("mouse moving");
try{
robot=new Robot();
}
catch(AWTException e){}
this.start();
}
public void run()
{
while(true)
{
int mouseX=MouseInfo.getPointerInfo().getLocation().x;//得到鼠标x坐标
int mouseY=MouseInfo.getPointerInfo().getLocation().y;//获得y坐标
color=robot.getPixelColor(mouseX,mouseY);//获取颜色
screenImage=robot.createScreenCapture(new Rectangle(mouseX-4,mouseY-4,9,9));//获得所在点周围的图像 label1[0].setText("X: "+mouseX);
label1[1].setText("Y: "+mouseY);
label1[2].setText("R: "+color.getRed());
label1[3].setText("G: "+color.getGreen());
label1[4].setText("B: "+color.getBlue());
repaint();
try{
sleep(10);
}
catch(InterruptedException i){}
}
}
}
}