2

こんにちは、JFrame で特定のピクセルの色を取得しようとしています。

これは私のコードです。私のフレームは赤です。

私が抱えている問題は、フレームをクリックすると、赤の RGB カラー (255,0,0) が返されるはずですが、別のポイントをクリックすると、白の RGB カラー (255,255,255) が返されることがあります。私のコードの人の問題?

public class guiTest extends JFrame 
{

    private static Shape ellipse;   
     private static Robot rb;

    public guiTest()
    {
    super("4-connected approach");
    setLayout(new FlowLayout());
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);
    setSize(800,800);
    this.getContentPane().setBackground(Color.red);
    setLocationRelativeTo(null);
    addMouseListener(new MouseListener(){
        @Override
        public void mouseClicked(MouseEvent e) {
            System.out.println("Pixel:"+e.getX()+","+e.getY());             
            try {
                System.out.println(getPixel(e.getX(),e.getY()));
            } catch (AWTException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }

        }

        @Override
        public void mouseEntered(MouseEvent e) {
            // TODO Auto-generated method stub

        }

        @Override
        public void mouseExited(MouseEvent e) {
            // TODO Auto-generated method stub

        }

        @Override
        public void mousePressed(MouseEvent e) {
            // TODO Auto-generated method stub

        }

        @Override
        public void mouseReleased(MouseEvent e) {
            // TODO Auto-generated method stub

        }


    });

}


public static Color getPixel(int x,int y) throws AWTException{
    Robot rb=new Robot();
    return rb.getPixelColor(x, y);
}   


public static void main(String[] args){
    guiTest frame=new guiTest();    
}
4

1 に答える 1

1

問題は、 (JFrame の左上隅が (0,0) である)に対して相対的であるため、座標を取得する方法ですe.getX()e.getY()JFrame

ピクセルの座標を取得するには、次を使用します。

public void mouseClicked(MouseEvent e) {
    Point p = e.getLocationOnScreen();

    System.out.println("Pixel:" + p.x + "," + p.y);
    try {
        System.out.println(getPixel(p.x, p.y));
    } catch (AWTException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

}

[おまけ] 他のことを改善するためにこれを読んでください:この小さなマウス フック アプリケーションを実行すると、マウスの動作が遅くなるのはなぜですか?

于 2016-03-17T22:28:56.070 に答える