0
//package mci;

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.GeneralPath;
import java.awt.geom.Arc2D;
import java.awt.geom.Ellipse2D;
import java.awt.geom.GeneralPath;
import java.awt.geom.Line2D;
import java.awt.geom.Rectangle2D;
import java.awt.geom.RoundRectangle2D;
 import javax.swing.*;
 import java.awt.Color;
   import java.awt.Robot;


 public class Cross extends JFrame{

private static final long serialVersionUID = 4952421515715804191L;

static private int positionPointerX = 0;    //Position X des Mauszeigers
static private int positionPointerY = 0;    //Position Y des Mauszeigers

//Initialisierung
public Cross()
{
    super("Kreuz");

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

    setBounds(0, 0, 800, 600);
    setLocation((int)dim.getWidth()/2 - getWidth()/2, (int)dim.getHeight()/2 - getHeight()/2);
    setBackground(Color.white);
    setForeground(Color.black);

    addWindowListener(new WindowAdapter()
    {   
        public void windowClosing(WindowEvent e) 
        {
            System.exit(0);
        }
    });

    setVisible(true);
}

//Zeichnen
public void paint(Graphics g1D) 
{
    //try { //aufgabe d
    Graphics2D g = (Graphics2D) g1D;
    g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    g.clearRect(0, 0, getWidth(), getHeight());

    //Position der Maus im Bildschirm
    g.setFont(new Font("Tahoma", Font.BOLD,64));
    g.drawString(positionPointerX+" "+positionPointerY, 250, 550); 
    Graphics2D g2d = (Graphics2D) g;//start a
    GeneralPath path = new GeneralPath(GeneralPath.WIND_NON_ZERO);
    path.moveTo(100, 50);
    path.lineTo(150, 50);
    path.lineTo(150, 100);
    path.lineTo(200, 100);
    path.lineTo(200, 150);
    path.lineTo(150, 150);
    path.lineTo(150, 200);
    path.lineTo(100, 200);
    path.lineTo(100, 150);
    path.lineTo(50, 150);
    path.lineTo(50, 100);
    path.lineTo(100, 100);
    path.closePath();//end a
    GradientPaint redtowhite = new GradientPaint(100, 50, Color.red, 150, 200,
    Color.blue);  
    g2d.setPaint(redtowhite);   //B
    g2d.fill(path);
    g2d.setPaint(Color.green); // C
    g2d.setStroke(new BasicStroke(4.0f));//C
    g2d.draw(path);
   /* Robot robot = new Robot(); //Aufgabe D
    Color color = (robot.getPixelColor(positionPointerX, positionPointerY));    
    int red = color.getRed();
    int green = color.getGreen();
    int blue = color.getBlue();
    Color farbe = new Color(red,green,blue);
    g2d.setPaint(farbe); // D
    g2d.setStroke(new BasicStroke(4.0f));//D
    g2d.draw(path);
    */





}
 /* catch (AWTException e) { ((aufgabe D
        e.printStackTrace();
        }

}*/
//Hauptschleife (Update alle 1/60 Sekunden)
public static void main(String[] args)
{
    Cross window = new Cross();
    while(true)
    {
        try
        {
            Thread.sleep(1000/60);
        } 
        catch(InterruptedException ex)
        {
            Thread.currentThread().interrupt();
        }

        PointerInfo pointerInfo = MouseInfo.getPointerInfo();
        Point pointerPos = pointerInfo.getLocation();
        positionPointerX = pointerPos.x;
        positionPointerY = pointerPos.y;
        window.repaint();
    }
}

}

Hey Guys, so for some study excercises, i wanted to draw a cross, with a border that paints according to the color the mouse points to, but it keeps being green. to have my code remove the comment blocks. Somehow i cant draw the color the robot gets, or i cant get it updated, i dont know. if i close the window its actually turning red from hitting x button, but as i said... i dunno. i'd really appreciate some commentated help. kind regards

Sayiro
  • 1
  • 2
  • Don't override `paint` of top level containers, use a `JComponent` or `JPanel` and override it's `paintComponent` instead. Call the `super` paint method before you do any custom painting so you continue to fulfil the contract of the paint chain. – MadProgrammer Nov 16 '15 at 22:58
  • I might be better to use a Swing `Timer` or `SwingWorker` to monitor the `PointerInfo` (I assume you want to monitor the position of the mouse outside of the frame) as they provide means to safely interact with the UI. You should get the color under the mouse pointer in these loops, not in the paint method – MadProgrammer Nov 16 '15 at 22:59
  • And [example](http://stackoverflow.com/questions/18158550/zoom-box-for-area-around-mouse-location-on-screen/18158845#18158845). Also have a look at [Painting in AWT and Swing](http://www.oracle.com/technetwork/java/painting-140037.html) and [Performing Custom Painting](https://docs.oracle.com/javase/tutorial/uiswing/painting/) – MadProgrammer Nov 16 '15 at 23:01

0 Answers0