Erste Schritte drawOval Problem in Paint Anwendung

Sessiolog

Mitglied
Grüße!

Ich bin zurzeit dabei, eine einfache Paint- Anwendung zu schreiben. Diese soll unter anderem die Funktion haben, aus zwei X und zwei Y - Werten ein Kreis/Oval zu zeichnen. Logischerweise mit der "drawOval" Methode. Code:

Java:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.Graphics;

class Malen extends JFrame implements ActionListener
{
	public static int x 	= 0;
	public static int y 	= 0;
	public static int x2 	= 0;
	public static int y2 	= 0;
	
	public static boolean 	drawC 	= false;

	JButton 	circle;

	public static void main (String [] args)
	{
		Malen frame = new Malen("Malen");
		frame.setVisible(true);
		frame.setSize(400,400);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	} 		
	
	public Malen(String str)
	{
		super(str);
		circle = new JButton("Circle");
		circle.setActionCommand("c");
		circle.addActionListener(this);
		
		ZeichenPanel drawPanel = new ZeichenPanel();
		drawPanel.setBackground(Color.BLACK);
		add(circle, BorderLayout.NORTH);
		add(drawPanel, BorderLayout.CENTER);
		addMouseListener(new InMalen());
		
		//Insets inset = circle.getInsets(); 		 
		//System.out.println(inset);
	}
	
	public void actionPerformed(ActionEvent e)
	{
		if(e.getActionCommand().equals("c"))
		{
			drawC = true;
			repaint();
		}
	}
	
	class InMalen extends MouseAdapter
	{
		public void mousePressed(MouseEvent m)
		{
			x = m.getX();
			y = m.getY();
			//System.out.println("X = " + x + " Y = " + y);
		}
			
		public void mouseReleased(MouseEvent n)
		{
			x2 = n.getX();
			y2 = n.getY();
			//System.out.println("X2 = " + x2 + " Y2 = " + y2);
		}
	}

	class ZeichenPanel extends JPanel
	{
		protected void paintComponent(Graphics g)
		{
			super.paintComponent(g);
			g.setColor(Color.ORANGE);
		
			if (drawC)
			{
				repaint();
				g.drawOval(x - 8, y - 56, x2 - x, y2 - y);
				// Von x müssen noch 8 Pixel, von y 56 Pixel 
				//subtrahiert werden, damit das Oval nicht
				// versetzt gezeichnet wird.
			}
		}
	}
}

Dabei ergibt sich folgendes Problem:
Wenn ich das Oval von links-oben nach rechts-unten zeichne, funktioniert es ganz tadellos.
Wenn ich das Oval jedoch von rechts-oben nach links-unten zeichne, passiert nichts.
Der selbe Fall, wenn ich von links-unten nach rechts-oben oder von rechts-unten nach links-oben zeichne. Auf eine Lösung des Problems bin ich noch nicht gekommen, auch Google konnte mir nicht helfen, obwohl doch jedes Paint-Programm in der Lage sein sollte, die Umrisse eine Ovals zeichnen zu können.

Ich bedanke mich im Voraus. 🙂
 
Wenn du oben rechts beginnst, dann ist dein x2 bzw. y2 kleiner als dein x bzw. y. Dadurch setzt du beim Aufruf von drawOval die Breite und die Höhe des Ovals auf negative Werte. Gleichzeitig stimmen dann die übergebenen x- und y-Koordinaten nichtmehr, da diese bei drawOval die obere linke Ecke angeben.
 

Neue Themen


Zurück
Oben