3D-Grafik Cube Farbe setzen zur Laufzeit.

Quanters

Mitglied
Hallo, ich habe folgendes Problem bzw. mir fehlt das genaue verständnis für eine Fehlermeldung in einem von mir geschriebenem Programm.

Ich erzeuge mehrere 3D Cubes in meiner Scene. Nun möchte ich diese zur Laufzeit die Farbe ändern lassen. Die erfolgt wie folgt:
In der Methode: createSceneGraph werden die Cubes erzeugt:

Java:
Shape3D shape11 = new Shape3D(makeCube(w11),makeAppearance());

makeCube sieht so aus:
Java:
private QuadArray makeCube(float[] A){
		QuadArray plane = new QuadArray(24, GeometryArray.COORDINATES | GeometryArray.COLOR_3 );
		// Set coordinates
....
return plane
}

nun möchte ich irgendwo im Programm, z.B. beim klicken eines Buttons, das sich die Farbe eines bestimmten Cubes ändert. Nun dachte ich eigentlich ich könnte das mit

Java:
	Appearance app = new Appearance( );
					ColoringAttributes ca = new ColoringAttributes( );
					ca.setColor( 1.0f, 1.0f, 0.0f );
					
					shape11.setAppearance(app);

irgendwie machen, doch da bekomme ich die Meldung:

Java:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at ECube$1.actionPerformed(ECube.java:220)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)

Der gesammte Quellcode is leider zu lang ihn hier zu Posten. Sollte es unverständlich sein, was genau gemeint ist, bitte einfach fragen. Was ich mir vorstellen könnte, das er das Object irgendwie nicht finden kann?! ???:L
Oder liegt es an meiner selbst geschriebenen Methode makeCube? Dort setze ich halt die coordinaten und die Farben für die Cube ecken.

thx schonmal für Antworten + Ideen.
 

Illuvatar

Top Contributor
Das sieht ziemlich danach aus, als wäre shape11 null. Hast du vielleicht ausversehen sowas gemacht:
Java:
class MyClass {
  private Shape3D shape11;
  // ...
  public void createSceneGraph() {
    Shape3D shape11 = new Shape3D(makeCube(w11),makeAppearance());
    // ...
  }
}
Wenn ja: das Shape3D-Objekt da ist ein lokales Objekt, das nichts mit der Instanzvariable zu tun hat. Schreib in der Methode nur:
Java:
shape11 = new Shape3D(makeCube(w11),makeAppearance());
 

Quanters

Mitglied
Hi,

danke das hat schonmal geholfen. Da hätte ich aber auch drauf kommen können (müssen). ;)

Nun hab ich einen weiteren Fehler:

Java:
Exception in thread "AWT-EventQueue-0" javax.media.j3d.CapabilityNotSetException: Shape3D: no capability to set appearance
	at javax.media.j3d.Shape3D.setAppearance(Shape3D.java:507)
	at ECube$1.actionPerformed(ECube.java:231)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)

Habe nun danach gesucht und sowas gefunden wie:

Java:
Appearance app = new Appearance();
        app.setCapability(Appearance.ALLOW_COLORING_ATTRIBUTES_READ);
        app.setCapability(Appearance.ALLOW_COLORING_ATTRIBUTES_WRITE);
cola = new ColoringAttributes();
        cola.setCapability(ColoringAttributes.ALLOW_COLOR_WRITE);
        cola.setCapability(ColoringAttributes.ALLOW_COLOR_READ);

Nun habe ich versucht dies einzubauen in meine makecube methode, dies hat aber leider keine Wirkung. Ideen?
 

Illuvatar

Top Contributor
Im ersten Post schreibst du dass du das gesamte Appearance-Objekt des Shape3D austauschst. Dann genügt es natürlich nicht, nur bei dem alten Appearance-Objekt ALLOW_..._WRITE zu setzen, da bräuchtest du Shape3D.ALLOW_APPEARANCE_WRITE.

Aber ich denke es wäre sinnvoller, wenn du beim Button-Klick direkt sowas machst wie [c]shape11.getAppearance().getColoringAttributes().setColor(...)[/c].
Dann brauchst du eben:
Shape3D.ALLOW_APPEARANCE_READ
Appearance.ALLOW_COLORING_ATTRIBUTES_READ
ColoringAttributes.ALLOW_COLOR_WRITE
 

Quanters

Mitglied
Irgendwie scheint mir das noch nicht ganz klar zu sein.

Ich will nun natürlich die ecken meinem Cubes einfärben. Nur leider verstehe ich nicht wie ich da an die colorwerte ran komme um diese neu zusetzen.

Da unten funktioniert, aber er setzt dadurch natürlich nicht die eckfarben :(
Der knackpunkt is also, wie greife ich darauf zu?

Oder hast du es da unten schon geschrieben und ich habe es nur nicht richtig verstanden?

sry, ich bin nicht so fit in Java.
 

Illuvatar

Top Contributor
Also... was willst du jetzt genau machen? ;) Was meinst du mit Eckfarben?
Soll der Würfel einheitlich gefärbt sein oder haben die Ecken unterschiedliche Farben? In letzterem Fall kommst du mit ColoringAttributes nicht weit, dann musst du die Farben direkt für die Vertices setzen.

Sobald ich versteh was du machen willst, kann ich dir auch gern ein kurzes Beispiel schreiben.
 

Quanters

Mitglied
Farben direkt für die Vertices setzen <-- Das is der fall.

Nur verstehe ich leider nicht ganz wie ich das auf meinem shape11 anstellen kann.
 

Quanters

Mitglied
Ja, genau das brauche ich.
Wie bekomme ich das nun aber hin? Sowas wie.

shape11.(?).setColor(index,color)

mir fehlen da die zusammenhänge. Ich mein, mir ist klar das es dieses Objekt gibt und das ich darauf zugreifen kann. Aber wie genau? Wäre schön wenn du mir das einmal aufschreiben könntest :)
Danke!
 

Quanters

Mitglied
Wunderbar!! Danke für deine Gedult. Vielen vielen Dank das hat mir doch sehr viele nerven erspart :)

Um es noch zu ergänzen:
((QuadArray)shape11.getGeometry()).setCapability(GeometryArray.ALLOW_COLOR_WRITE);
((QuadArray)shape11.getGeometry()).setCapability(GeometryArray.ALLOW_COLOR_READ);
müssen noch gesetzt werden. Dann läufts.

*glücklich sei*
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L 3D Cube (Bresenham-Alg.) AWT, Swing, JavaFX & SWT 16
H JavaFX PixelWriter.setColor setzt Farbe nicht AWT, Swing, JavaFX & SWT 2
F Progressbar Farbe AWT, Swing, JavaFX & SWT 6
jojoge Wie erstelle ich runde Buttons mit Farbe? AWT, Swing, JavaFX & SWT 1
Kotelettklopfer Frame ändert Farbe nicht AWT, Swing, JavaFX & SWT 12
Hatsi09 GUI Input Farbe ändern AWT, Swing, JavaFX & SWT 0
L Swing Button Farbe ändern/wechseln AWT, Swing, JavaFX & SWT 2
B JavaFX Farbe eines Quadrates in einer separaten Klasse ändern AWT, Swing, JavaFX & SWT 4
L AWT Ändern der Farbe eines BufferedImage mit Farbähnlichkeit AWT, Swing, JavaFX & SWT 5
sascha-sphw JavaFX ListCell höhe verändert sich beim ändern der Text-Farbe AWT, Swing, JavaFX & SWT 14
F Drag&Drop mit Transparenter Farbe bei PNG AWT, Swing, JavaFX & SWT 0
V Swing für jedes Kästchen eine eigene Farbe AWT, Swing, JavaFX & SWT 2
Drachenbauer Swing Wie ändere ich die Farbe der Konturen von jButton und jCombobox? AWT, Swing, JavaFX & SWT 18
Drachenbauer Swing Wie ändere ich die helle geklickt-Farbe von einem JButton? AWT, Swing, JavaFX & SWT 4
H JFreeChart BarDiagramm Balken der gleichen Serie unterschiedliche Farbe zuordnen AWT, Swing, JavaFX & SWT 2
cool_brivk24 Swing Button Farbe ändern AWT, Swing, JavaFX & SWT 2
R Farbe zu einem Eckpunkt generieren AWT, Swing, JavaFX & SWT 2
MaxG. Swing Farbe von Button beim drücken ändern AWT, Swing, JavaFX & SWT 4
P Jframe Bild einfügen, Hintergrund Farbe ändern, und Button schrift Größe ändern AWT, Swing, JavaFX & SWT 2
A JButton soll durch anklicken die Farbe wechseln AWT, Swing, JavaFX & SWT 8
I 2D-Grafik Problem beim Ändern der Farbe eine 2d Objekts AWT, Swing, JavaFX & SWT 3
W Farbe des Fensters AWT, Swing, JavaFX & SWT 2
krgewb Swing JTree - Farbe von nodes ändern AWT, Swing, JavaFX & SWT 4
M Ausgabe der HSL oder RGB Zusammensetzung einer Farbe (JColorChooser AWT, Swing, JavaFX & SWT 1
J JavaFX Bestimmte Zellen im TableView ändern (Farbe und Text) AWT, Swing, JavaFX & SWT 1
Z Möglichkeit mit Listerners die Farbe meiner Objekte zu ändern AWT, Swing, JavaFX & SWT 15
K (GUI) JButton Farbe bei druck ändern AWT, Swing, JavaFX & SWT 3
C Arrow Farbe bei JComboBox AWT, Swing, JavaFX & SWT 2
S Größe und Farbe vom JButton festlegen AWT, Swing, JavaFX & SWT 2
S Farbe ändern bei der paint-Methode AWT, Swing, JavaFX & SWT 5
V LookAndFeel JSpinner Hintergrund Farbe mit Nimbus LaF AWT, Swing, JavaFX & SWT 0
X mouseover verändert ungewollt die farbe AWT, Swing, JavaFX & SWT 4
D Swing Farbe aus Pixel vom JFrame auslesen AWT, Swing, JavaFX & SWT 17
T Swing JScrollPane Farbe der Scrollbar AWT, Swing, JavaFX & SWT 3
J Swing Farbe wählen ohne JColorChooser 2 AWT, Swing, JavaFX & SWT 23
S Farbe von JButton ändern AWT, Swing, JavaFX & SWT 5
T Jbutton Click farbe ändern AWT, Swing, JavaFX & SWT 4
C AWT Wie setze ich die Farbe "leuchtetgrün"? AWT, Swing, JavaFX & SWT 4
B Swing Button Farbe AWT, Swing, JavaFX & SWT 3
M Hover-Farbe über Hintergrundfarbe legen AWT, Swing, JavaFX & SWT 3
N Farbe abziehen AWT, Swing, JavaFX & SWT 3
R Farbe von Buttons stimmt nicht AWT, Swing, JavaFX & SWT 2
B Cursor Farbe ändern AWT, Swing, JavaFX & SWT 6
Y LookAndFeel JTabbedPane: Tab-Farbe mit Nimbus setzen AWT, Swing, JavaFX & SWT 3
T DefaultTableCellRenderer Farbe bestimmter Zelle ändern AWT, Swing, JavaFX & SWT 2
D JComboBox jedes Item mit einer anderen Farbe AWT, Swing, JavaFX & SWT 10
P JLabel Farbe/Bild ändern aus MouseListener heraus AWT, Swing, JavaFX & SWT 3
P 2D-Grafik Neue Farbe für einen Teilbereich einer Linie? AWT, Swing, JavaFX & SWT 8
K 2D-Grafik Fehler beim Farbe auslesen AWT, Swing, JavaFX & SWT 3
T JTable Zellen Farbe AWT, Swing, JavaFX & SWT 13
D JTabel: Überschrift, Abstand zwischen Tabellen, Spalten-Farbe ändern AWT, Swing, JavaFX & SWT 2
D Swing JTable, Zellen-Farbe über Koordinaten ändern AWT, Swing, JavaFX & SWT 9
N SWT-Widgets in Farbe AWT, Swing, JavaFX & SWT 21
F JButton Text-Farbe bei Disabled AWT, Swing, JavaFX & SWT 2
C Farbe eines ToolTipTextes eines Buttons AWT, Swing, JavaFX & SWT 4
D JTabbedPane - Farbe ändern im Bereich hinter den Reitern AWT, Swing, JavaFX & SWT 2
I Schrift und Farbe formatieren, und zwar pro Linie... AWT, Swing, JavaFX & SWT 4
A SWT - Farbe von Text auf Label ändern AWT, Swing, JavaFX & SWT 2
M Combobox soll Farbe einer Komponente setzen AWT, Swing, JavaFX & SWT 2
N Swing JEditorPane mit Farbe und Font AWT, Swing, JavaFX & SWT 2
chik Button beschriften und Farbe zufällig anordnen AWT, Swing, JavaFX & SWT 2
S JSlider Track Breite und Farbe AWT, Swing, JavaFX & SWT 2
D SWT TabItem Farbe der Schrift ändern AWT, Swing, JavaFX & SWT 3
L JFreeChart Farbe von Balken AWT, Swing, JavaFX & SWT 5
C Welche Farbe hat die Auswahl in einer JTable? AWT, Swing, JavaFX & SWT 2
O AWT Zeichne mit eigener Farbe AWT, Swing, JavaFX & SWT 3
N Farbe einer einzelnen Zeile einer JTable ändern AWT, Swing, JavaFX & SWT 10
S JSplitPane ändert Farbe nicht AWT, Swing, JavaFX & SWT 4
O Hgr- Farbe einer JTable ändert sich nicht AWT, Swing, JavaFX & SWT 11
V JComboBox - Farbe in der Auswalliste AWT, Swing, JavaFX & SWT 7
GambaJo Farbe eines JFrames AWT, Swing, JavaFX & SWT 2
K Icon auf JButton mit Wechsel der Farbe AWT, Swing, JavaFX & SWT 2
D Farbe bei einem JButton wechseln AWT, Swing, JavaFX & SWT 4
L Farbe des Auswahlrechtecks bei selektierter Tabellenzeile AWT, Swing, JavaFX & SWT 9
M JComboBox Selected-Background Farbe AWT, Swing, JavaFX & SWT 5
K Farbe eines Pixels in einem Bild AWT, Swing, JavaFX & SWT 7
I JLabel Farbe AWT, Swing, JavaFX & SWT 1
L wie setze ich die Farbe des Pfeils in einer JComboBox? AWT, Swing, JavaFX & SWT 5
G Farbe der Markierung einer Componente ändern AWT, Swing, JavaFX & SWT 2
G JOptionPane mit andere Farbe AWT, Swing, JavaFX & SWT 8
G JFrame und Farbe AWT, Swing, JavaFX & SWT 4
M Farbe eines strings in JTextArea AWT, Swing, JavaFX & SWT 2
J JTree - Farbe von nodes ändern AWT, Swing, JavaFX & SWT 2
F Farbe für den Hintergrund eine BorderLayout-Teils AWT, Swing, JavaFX & SWT 5
G Bild mit transparente farbe für den IE6 AWT, Swing, JavaFX & SWT 5
G Farbe ändern bei Klick auf einen Kreis AWT, Swing, JavaFX & SWT 5
B transparente Farbe AWT, Swing, JavaFX & SWT 3
N Die Zeile einer JTable verändert beim klicken ihre Farbe? AWT, Swing, JavaFX & SWT 7
H JButton Farbe verändern AWT, Swing, JavaFX & SWT 4
G Bild a auf Bild b, bestimmte Farbe (zb Weiß) durchsichtig AWT, Swing, JavaFX & SWT 7
G JTable Zeile mit Farbe füllen AWT, Swing, JavaFX & SWT 2
I Farbe aus einem Icon herauslesen AWT, Swing, JavaFX & SWT 5
A JProgressBar: Farbe im Windows Look&Feel ändern. AWT, Swing, JavaFX & SWT 1
E Spalten Farbe ändern AWT, Swing, JavaFX & SWT 3
J Cell Farbe in JTable AWT, Swing, JavaFX & SWT 31
U Farbe von Kreis AWT, Swing, JavaFX & SWT 3
B JFrame Farbe ändern AWT, Swing, JavaFX & SWT 15
J Auf Button - Druck soll Rechteck Farbe verändern AWT, Swing, JavaFX & SWT 8
vogella JTextArea mit Farbe des Hintergrundes AWT, Swing, JavaFX & SWT 2
Kirua Problem: Farbe Dinamic zu wechseln AWT, Swing, JavaFX & SWT 9

Ähnliche Java Themen

Neue Themen


Oben