Anfänge mit Graphics2D

Status
Nicht offen für weitere Antworten.

The_S

Top Contributor
Hab mich jetzt mal an Graphics2D gemacht. Ich habe eine Klasse

Code:
class Zeichnen extends JPanel {
	
	public void paintComponent(Graphics comp) {
		
		Graphics2D comp2D = (Graphics2D)comp;
		comp2D.setColor(Color.blue);
		comp2D.fillRect(0, 0, 455, 375);
		comp2D.setColor(Color.white);
		for (int a = 5; a < 450; a = a + 50) {
			for (int b = 5; b < 350; b = b + 50) {
				comp2D.fillRoundRect(a, b, 40, 40, 40, 40);
			}
		}	
	}
}

die mir meinen Hintergrund zeichnet, jetzt möchte ich aber bei einer bestimmten Aktion in meiner Hauptklasse den Hintergrund anpassen! Also z. B. wenn der User etwas drückt, verfärbt sich ein Kreis. Nur wie baue ich jetzt ein, dass die Veränderungen erst gemacht wird, wenn der Knopf gedrückt wurde. Hab das schonmal mit boolean probiert, hatte aber keinen wirklichen Erfolg.
 

The_S

Top Contributor
Schätzungsweiße muss ich die Veränderung des Kreises ja in mein paintComponent mit einbauen. Nur stehe ich irgendwie auf den Schlau, wie ich diese Veränderung später zu einem späteren Zeitpunkt ausführen kann.
 

Marce

Mitglied
ACh so - ja z.B. mit einem Boolean hast du ja selber gesagt.

machste bei der farbe ne abfrage, ob der boolean true ist und wenn ja galb und wenn nicht rot oder so...
den boolean z.B. als klassenvariable von ausen sezen
 

Marce

Mitglied
Also wenn man dir helfen soll muss du schon sagen was du wie willst.

Deine Aussage
Hab doch aber mehrere Klassen
hat nichts mit dem zu tun, dass du die Farben ändern willst, also wo liegt das Problem bei deinen Klassen?
 

The_S

Top Contributor
Alles in allem schaut das bis jetzt so aus

Code:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class test extends JFrame implements ActionListener {
	
	Zeichnen mal = new Zeichnen();
	JButton[] zahlen = new JButton[9];
	JMenuBar menu = new JMenuBar();
	JMenuBar nr = new JMenuBar();
	JMenu datei = new JMenu("Datei");
	
	public test() {
		
		setSize(458, 425);
		menu.add(datei);
		for (int a = 0; a < zahlen.length; a++) {
			zahlen[a] = new JButton(" " + (a + 1) + "  ");
			nr.add(zahlen[a]);
			zahlen[a].addActionListener(this);
		}
		getContentPane().setLayout(new BorderLayout());
		getContentPane().add(menu, BorderLayout.NORTH);
		getContentPane().add(nr, BorderLayout.SOUTH);
		getContentPane().add(mal);
	}
	
	public static void main(String[] args) {
		
		test win = new test();
		win.setVisible(true);
	}
	
	public void actionPerformed(ActionEvent evt) {
		
		Object source = evt.getSource();
		for (int a = 0; a < zahlen.length; a++) {
			if (source == zahlen[a]) {
			}
		}
	}
}

class Zeichnen extends JPanel {
	
	public void paintComponent(Graphics comp) {
		
		Graphics2D comp2D = (Graphics2D)comp;
		comp2D.setColor(Color.black);
		comp2D.fillRect(0, 0, 455, 375);
		comp2D.setColor(Color.white);
		for (int a = 5; a < 450; a = a + 50) {
			for (int b = 5; b < 350; b = b + 50) {
				comp2D.fillRoundRect(a, b, 40, 40, 40, 40);
			}
		}
	}
}

Wenn man jetzt auf eine Zahl klickt, soll sich etwas verändern (also bei BorderLayout.CENTER).
 
G

Gast

Gast
bau dir doch einfach in deine Zeichnen Klasse eine
Code:
public static void setColor(String col)
auf die kannst du dann im actionPerformed mit Zeichnen.setColor(blabla) die Farben setzen
oder hab ich dich falsch verstanden?
 

Marce

Mitglied
Ich nehme mal an, dass du verschiedene Farben haben willst.
Also ich würde in die Klasse Zeichnen zwei private Variable vom typ int oder so machen, dann eine Methode in Zeichnen, der du 2 integer-variablen übergibst (x und y), die die beiden privaten vaiablen setzt und repaint() aufruft.

Code:
class Zeichnen extends JPanel {
   private int x, y;
   public void farbigMalen(int x, int y){
       this.x = x;
       this.y = y;
       this.repaint();
   }
   public void paintComponent(Graphics comp) {
     .....
   }
}

diese x und y musst du dann beim Zeichnen mit einbeziehen

/e hätt ich fast vergessen... noch eine Variable, der du sagst welche farbe muss auch mit rein...
 

The_S

Top Contributor
Hab jetzt zu testzwecken diesen Code gebaut:

Code:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class ForWins extends JFrame implements ActionListener {
	
	Zeichnen mal = new Zeichnen();
	int status[][] = new int[7][9];
	JButton[] zahlen = new JButton[9];
	JMenuBar menu = new JMenuBar();
	JMenuBar nr = new JMenuBar();
	JMenu datei = new JMenu("Datei");
	
	public ForWins() {
		
		setSize(458, 425);
		menu.add(datei);
		for (int a = 0; a < zahlen.length; a++) {
			zahlen[a] = new JButton(" " + (a + 1) + "  ");
			nr.add(zahlen[a]);
			zahlen[a].addActionListener(this);
		}
		getContentPane().setLayout(new BorderLayout());
		getContentPane().add(menu, BorderLayout.NORTH);
		getContentPane().add(nr, BorderLayout.SOUTH);
		getContentPane().add(mal);
	}
	
	public static void main(String[] args) {
		
		ForWins win = new ForWins();
		win.setVisible(true);
	}
	
	public void actionPerformed(ActionEvent evt) {
		
		Object source = evt.getSource();
		for (int a = 0; a < zahlen.length; a++) {
			if (source == zahlen[a]) {
				mal.step();
			}
		}
	}
}

class Zeichnen extends JPanel {
	
	boolean first = true;
	int spieler = 0;
	int x = 0;
	int y = 0;
	
	void step() {

		spieler = 1;
		x = 5;
		y = 5;
		this.repaint();
	}
	
	public void paintComponent(Graphics comp) {
		
		Graphics2D comp2D = (Graphics2D)comp;
		if (first == true) {
			comp2D.setColor(Color.blue);
			comp2D.fillRect(0, 0, 455, 375);
			comp2D.setColor(Color.white);
			for (int a = 5; a < 450; a = a + 50) {
				for (int b = 5; b < 350; b = b + 50) {
					comp2D.fillRoundRect(a, b, 40, 40, 40, 40);
				}
			}
			first = false;
		}
		else {
			if (spieler == 1) {
				comp2D.setColor(Color.red);
			}
			else {
				comp2D.setColor(Color.yellow);
			}
			comp2D.fillRoundRect(x, y, 40, 40, 40, 40);
		}
	}
}

Warum wird meine Anzeige total verzerrt? Also unter meiner oberen JMenuBar erscheint noch eine mit der Zahl auf die ich geklickt hab
 

The_S

Top Contributor
Habs selber hinbekommen

Code:
class Zeichnen extends JPanel {
	
	boolean first = true;
	int status[][] = new int[9][7];
	
	void step(int x, int y, int player) {

		status[x][y] = player;
		this.repaint();
	}
	
	public void paintComponent(Graphics comp) {
		
		Graphics2D comp2D = (Graphics2D)comp;
		comp2D.setColor(Color.blue);
		comp2D.fillRect(0, 0, 455, 375);
		comp2D.setColor(Color.white);
		for (int a = 5, c = 0; a < 450; a = a + 50, c++) {
			for (int b = 5, d = 6; b < 350; b = b + 50, d--) {
				if (status[c][d] == 1) {
					comp2D.setColor(Color.red);
				}
				else if (status[c][d] == 2) {
					comp2D.setColor(Color.yellow);
				}
				comp2D.fillRoundRect(a, b, 40, 40, 40, 40);
				comp2D.setColor(Color.white);
			}
		}
		first = false;
	}
}
 
G

Gast

Gast
ein bißchen komisch das ganze, oder?? also, was ich dir sagen wollte, sieht in etwa so aus
Code:
  public static void main(String[] args) { 
       
      test win = new test(); 
      win.setVisible(true); 
   } 
   
   public String col[] = { "red", "green", "yellow" };  // usw...für jeden button eine
                                                        // farbe definieren
   
   public void actionPerformed(ActionEvent evt) { 
       
      Object source = evt.getSource(); 
      for (int a = 0; a < zahlen.length; a++) { 
         if (source == zahlen[a]) { 
             Zeichnen.setColor(col[a]);
         } 
      } 
      repaint();
   } 
} 

class Zeichnen extends JPanel { 
   
   private static String colore = "red";        // Anfangsfarbe, sonst gibt's
                                                // ne NullPointerException
   
   public static void setColor(String col) {                 
       colore = col;
   }
   
   public void paintComponent(Graphics comp) { 
       
      Graphics2D comp2D = (Graphics2D)comp; 
      comp2D.setColor(Color.black); 
      comp2D.fillRect(0, 0, 455, 375); 
      
      if (colore.equals("red")) {
          comp2D.setColor(Color.red);
      } else if (colore.equals("green")) {
          comp2D.setColor(Color.green);
      } else if (colore.equals("yellow")) {
          comp2D.setColor(Color.yellow);
      }                                         // usw. für alle farben
      
      for (int a = 5; a < 450; a = a + 50) { 
         for (int b = 5; b < 350; b = b + 50) { 
            comp2D.fillRoundRect(a, b, 40, 40, 40, 40); 
         } 
      } 
   } 
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B OOP-Anfänge über CMD + Editor Java Basics - Anfänger-Themen 30
N Kommandozeile,Anfänge Java Basics - Anfänger-Themen 12
N Compiler-Fehler GUI Anfänge Java Basics - Anfänger-Themen 15
L anfänge mit Poi Java Basics - Anfänger-Themen 6
I Anfänge in der Netzprogrammierung Java Basics - Anfänger-Themen 14
M Graphics2D Objekt mir der Maus erstellen Java Basics - Anfänger-Themen 5
K Zwei Fragen zu Graphics/Graphics2D Java Basics - Anfänger-Themen 5
Mr. Pink Graphics2D in anderer Methode aufrufen Java Basics - Anfänger-Themen 6
P Graphics2D Uhr refreshen Java Basics - Anfänger-Themen 2
B Erste Schritte Drehen in Graphics2d Java Basics - Anfänger-Themen 2
T Threads Thread & Graphics2D Java Basics - Anfänger-Themen 8
C Graphics2D - DrawRect - Warum Linien teilweise gefüllt? Java Basics - Anfänger-Themen 12
D Graphics2D (Welle darstellen) Java Basics - Anfänger-Themen 2
F Graphics2D nützlich für R³? Java Basics - Anfänger-Themen 11
C Graphics2D auf anderes Graphics2D übertragen Java Basics - Anfänger-Themen 5
K Graphics2D und BufferedImage Java Basics - Anfänger-Themen 3
P Graphics2D.drawString: Zahlen rechtsbündig ausrichten? Java Basics - Anfänger-Themen 2
Z Farbwechsel JButton mit Graphics2D Java Basics - Anfänger-Themen 7
X Kreize zeichnen in Graphics2D Java Basics - Anfänger-Themen 2
D Graphics2D.drawImage(Image, int, int, ?); Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben