Hallo,
ich habe ein Problem welches ich einfach nicht lösen kann:
Ich brauche in einem Programm ein Panel mit x mal y Punkten (ca. 200 x 300).
Die Farbe von jedem dieser Punkte soll später geändert werden können.
Unten habe ich zwei java Klassen eingefügt, welche das Problem hoffentlich verdeutlichen.
Natürlich funktioniert das Ganze noch nicht und es ist auch nur ein Ansatz.
Das Konkrete Problem in meinem Versuch ist, dass ich der changeColor(int i, Color c) Methode nicht das Graphics Objekt übergeben kann.
Die Sache wäre einfach wenn man changeColor(int i, Color c, Graphics g ) schreiben könnte.
Hat jemand einen Lösungsvorschlag oder eine bessere Idee?
GraphicsPanel.java
DisplayMain.java
(Der Sinn dieses Programms ist dass für Optische Experimente die Farbe der einzelnen Punkte sehr schnell geändert werden können soll. )
ich habe ein Problem welches ich einfach nicht lösen kann:
Ich brauche in einem Programm ein Panel mit x mal y Punkten (ca. 200 x 300).
Die Farbe von jedem dieser Punkte soll später geändert werden können.
Unten habe ich zwei java Klassen eingefügt, welche das Problem hoffentlich verdeutlichen.
Natürlich funktioniert das Ganze noch nicht und es ist auch nur ein Ansatz.
Das Konkrete Problem in meinem Versuch ist, dass ich der changeColor(int i, Color c) Methode nicht das Graphics Objekt übergeben kann.
Die Sache wäre einfach wenn man changeColor(int i, Color c, Graphics g ) schreiben könnte.
Hat jemand einen Lösungsvorschlag oder eine bessere Idee?
GraphicsPanel.java
Code:
package Test01;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Rectangle2D;
import javax.swing.JPanel;
public class GraphicsPanel extends JPanel {
private static final long serialVersionUID = 1L;
private Shape dots[] = new Shape[4];
private Graphics2D g2;
/**
* Zeichnet den Hintergrund und ein paar Punkte
*/
public void paintComponent(Graphics g) {
//alle shapes initialisieren
Shape rect = new Rectangle2D.Double(0.0, 0.0, 80.0, 80.0);
dots[0] = new Ellipse2D.Double(20.0, 20.0, 15.0, 15.0);
dots[1] = new Ellipse2D.Double(20.0, 60.0, 15.0, 15.0);
dots[2] = new Ellipse2D.Double(60.0, 20.0, 15.0, 15.0);
dots[3] = new Ellipse2D.Double(60.0, 60.0, 15.0, 15.0);
//hintergrund zeichnen
g2 = (Graphics2D) g;
g2.setColor(Color.red);
g2.fill(rect);
//Punkte zeichnen
g2.setColor(Color.blue);
g2.fill(dots[0]);
g2.fill(dots[1]);
g2.fill(dots[2]);
g2.fill(dots[3]);
}
/**
* sollte eigentlich die Farbe von einem bestimmten Punkt ändern.
* @param i - bezeichnet den entsprechenden Punkt
* @param c - die neue Farbe.
*/
public void changeColor(int i, Color c) {
//soll die Farbe von dots[i] aendern!!!
g2.setColor(c);
g2.fill(dots[i]);
}
}
DisplayMain.java
Code:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
public class DisplayMain implements ActionListener {
private static DisplayMain displayMain = new DisplayMain();
private static GraphicsPanel graphicsPanel = new GraphicsPanel();
public static void main(String[] args) {
JFrame f = new JFrame("Frame");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Button zum Testen
JButton button1 = new JButton("Change Color");
button1.addActionListener(displayMain);
f.add(button1, BorderLayout.NORTH);
//Das Panel mit den Punkten
// f.add(new GraphicsPanel(), BorderLayout.CENTER);
f.add(graphicsPanel, BorderLayout.CENTER);
f.setSize(160, 200);
f.setVisible(true);
}
public void actionPerformed(ActionEvent ae) {
//wenn auf den Button gedrückt wird, soll die Farbe von einem Punkt geändert werden.
graphicsPanel.changeColor(2, Color.yellow);
}
}
(Der Sinn dieses Programms ist dass für Optische Experimente die Farbe der einzelnen Punkte sehr schnell geändert werden können soll. )