was mache ich falsch?

mariusbopp

Bekanntes Mitglied
ich versuche schon seit ein paar tagen die schnittfläche von 2 rechtecken herrauszubekommen und in einer anderen farbe einzufärben aber irgendwie bekomme ich es nicht hin...;(

vill stell ich mich auch einfach zu doof an keine ahnung hier mal mein code:
also er sagt ich kann es in graphics2d nicht mit intersection vergleichen aber wie löse ich es sonst??
Java:
package grafik;

import java.awt.*; 

import javax.swing.*;

public class Quadrat extends JPanel {	
	
public void paintComponent(Graphics g) {

int x=20;
int y=20;
int width=150;
int hight=150;
	
//rechteck 1
Graphics2D g2 = (Graphics2D) g;
g2.setColor(new Color(20, 0, 200));
g2.fillRect(x, y, width, hight);

//rechteck2
Graphics2D g3 = (Graphics2D) g;
g3.setColor(new Color(255, 0, 136));
g3.fillRect(x+125, y+125, width-75, hight-75);


Rectangle r2 = g2.intersection(g3);
System.out.println(r2);
g.fillRect(r2.x, r2.y, r2.width, r2.height);
}
public static void main(String[] args) {
Quadrat e = new Quadrat ();

JFrame f = new JFrame("Quadrat");
f.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
f.setSize(450, 450);
f.add (e);
f.setVisible (true);
}
}

vielen dank schonmal
 
Zuletzt bearbeitet:
Hi,

[JAVA=27]
Rectangle r2 = g2.intersection(g3);
[/code]

g2 und g3 sind vom Typ Graphics2d und die Methode "intersect" ist nur beim Typ Rectangle definiert.
 
Benutz das "Graphics" Objekt wie du einen Pinsel benutzen würdest. Dann wird sofort klar, dass du kein Rechteck schneiden kannst, indem du zwei "Pinsel" versuchst zusammenzukneten...

Java:
package forum;

import java.awt.*;

import javax.swing.*;

public class Quadrat extends JPanel {

    public void paintComponent( Graphics g ){

        int x = 20;
        int y = 20;
        int width = 150;
        int height = 150;

        Rectangle r1 = new Rectangle(x, y, width, height);
        Rectangle r2 = new Rectangle(x+125, y+125, width-75, height-75);
    
        //rechteck 1
        Graphics2D g2 = (Graphics2D)g;
        
        g2.setColor( new Color( 20, 0, 200 ) );
        g2.fill( r1 );
        
        g2.setColor( new Color( 255, 0, 136 ) );
        g2.fill( r2 );
        
        g.setColor( Color.WHITE );
        Rectangle intersection = r1.intersection( r2 );
        g2.draw( intersection );
    }

    public static void main( String[] args ){
        Quadrat e = new Quadrat();

        JFrame f = new JFrame( "Quadrat" );
        f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        f.setSize( 450, 450 );
        f.add( e );
        f.setVisible( true );
    }
}
 
hi du verstehst das mit Graphics falsch.

Graphics ist eigentlich die Zeichenfläche wo du drauf zeichnest.
1. Da brauchst du nur eins, also nicht 1,2,3
2. Das hat keine Methode intersection

Also ich würd mir einfach 2 Rechtecke machen, mit intersection noch ein drittes und dann diese einfach auf den Graphics Kontext zeichnen....

zb so

Java:
public void paintComponent(Graphics g) {

		int x = 20;
		int y = 20;
		int width = 150;
		int hight = 150;

		Rectangle r1 = new Rectangle(x, y, width, hight);
		Rectangle r2 = new Rectangle(x + 125, y + 125, width - 75, hight - 75);
		Rectangle r3 = r1.intersection(r2);
		
		// rechteck 1
		Graphics2D g2 = (Graphics2D) g;
		g2.setColor(new Color(20, 0, 200));
		g2.fillRect(r1.x, r1.y, r1.height, r1.width);;

		// rechteck2
		//Graphics2D g3 = (Graphics2D) g; //warum? g ist dein Context auf den zu zeichnest, du braucht nur einen
		g2.setColor(new Color(255, 0, 136));
		g2.fillRect(r2.x, r2.y, r2.height, r2.width);;

		//Rectangle r2 = g2.intersection(g3); //Graphics kann das nicht..
		
		System.out.println(r3);
		g2.setColor(Color.GREEN);
		g.fillRect(r3.x, r3.y, r3.width, r3.height);
	}

Warum macht man das Graphics2D g2 = (Graphics2D) g;?
Ist vielleicht etwas schwer zu verstehen... Im grunde ist g ein Graphics2D Objekt, das mehr Funktionen bietet, um nicht alle alten Schnittstellen anzupassen steht hier noch das "alte" in der Schnittstelle und man kann es einfach casten... keine Ahnung ob das Sinn macht was ich gerade geschrieben habe... mir fallen grade die Augen zu.. ;-)
 
hey ihr seit echt klasse danke für eure antworten ich werde mich später nochmal drann setzen und es versuchen🙂:toll:

meld mich dann wenn ichs hab oder noch ne frage hab

lg
 
okay und schon hab ich die erste frage^^

also klappt alles soweit ganz gut hab das rechteck in der mitte auch farbig gefüllt mir
Java:
g.fillRect(x1.x, x1.y, x1.width, x1.height);

jetzt wollte ich mir noch die kordienaten und größe des rechteckes ausgeben lassen dafür hab ich einfach folgendes geschrieben
Java:
System.out.println(x1)
x1 steht hier für die intersection....

aber er gibt mir jetzt immer 2 mal aus:
java.awt.Rectangle[x=145,y=145,width=25,height=25]java.awt.Rectangle[x=145,y=145,width=25,height=25]


und noch eine sache ist mir eben aufgefallen wenn sich die rechtecke nicht schneiden wird trotzdem ein 3. rechteck erzeugt?! das darf dann doch eig ganicht sein!?
oder mach ich es mit der ausgabe falsch?
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben