Würfel zeichnen ?

H

Hertz

Gast
Hallo,

Habe ein Frage zum unteren Code.

Es wird die Anzahl Würfel gewählt, unde auf einem Label das Resultat der einzelnen Würfel, nebeneinander dargestellt.
Zusätzlich wollte ich Grafikwürfel, auf dem Panel erscheinen lassen.
Hier bin ich mir nicht sicher, ob das mit den if-bedingungen ok ist.
Habe in actionPerformed, etwas mit validate(), repaint(), und JPanel probiert, wobei das panel leer bleibt?

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

public class WürfelSpiel1 {
 public static void main(String[] args) {
  WürfelSpiel1 wu = new WürfelSpiel1();
  wu.getGuiPanel();
 }
 int z;
 JLabel label;
 JComboBox anzahlWürfel;
 JFrame frame;
 JPanel panel;

 public void getGuiPanel() {
  frame = new JFrame();
  frame.setSize(300,300);
  frame.setVisible(true);
  panel = new JPanel();
  JButton button = new JButton("Wirf!");
  String[] wahl = {"1", "2", "3", "4", "5"};
  anzahlWürfel = new JComboBox(wahl);
  label = new JLabel("hier erscheinen gleich die Augenzahlen");
  button.addActionListener(new WurfListener());
  panel.add(anzahlWürfel);
  panel.add(button);
  panel.add(label);
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  frame.getContentPane().add(panel);
 }

 public class WurfListener implements ActionListener {
  public void actionPerformed(ActionEvent ev) {
   //würfeln
   String augenZahl = "";
   String auswahl = (String) anzahlWürfel.getSelectedItem();
   int anzahlZuWerfende = Integer.parseInt(auswahl);
   for (int i = 0; i < anzahlZuWerfende; i++) {
    z = (int) ((Math.random() * 6) +1);
    augenZahl += (" " + z);
    Grafikwürfel w = new Grafikwürfel();
    frame.repaint();
   }
   label.setText(augenZahl);
  }
 }

 class Grafikwürfel extends JPanel {
  public void paintComponent(Graphics g) {
   if(z == 1) {
    g.setColor(Color.black);
    g.fillRect(350,350,90,90);
    g.setColor(Color.white);
    g.fillOval(385,385,20,20);
   }

   if(z == 2) {
    g.setColor(Color.blue);
    g.fillRect(750,350,90,90);
    g.setColor(Color.green);
    g.fillOval(750,350,20,20);
    g.fillOval(820,420,20,20);
   }

   if(z == 3) {
    g.setColor(Color.yellow);
    g.fillRect(850,350,90,90);
    g.setColor(Color.red);
    g.fillOval(850,350,20,20);
    g.fillOval(885,385,20,20);
    g.fillOval(920,420,20,20);
   }

   if(z == 4) {
    g.setColor(Color.green);
    g.fillRect(650,350,90,90);
    g.setColor(Color.cyan);
    g.fillOval(650,350,20,20);
    g.fillOval(650,420,20,20);
    g.fillOval(720,350,20,20);
    g.fillOval(720,420,20,20);
   }

   if(z == 5) {
    g.setColor(Color.pink);
    g.fillRect(450,350,90,90);
    g.setColor(Color.black);
    g.fillOval(450,350,20,20);
    g.fillOval(520,350,20,20);
    g.fillOval(485,385,20,20);
    g.fillOval(450,420,20,20);
    g.fillOval(520,420,20,20);
   }

   if(z == 6) {
    g.setColor(Color.darkGray);
    g.fillRect(550,350,90,90);
    g.setColor(Color.magenta);
    g.fillOval(560,350,20,20);
    g.fillOval(560,385,20,20);
    g.fillOval(560,420,20,20);
    g.fillOval(610,350,20,20);
    g.fillOval(610,385,20,20);
    g.fillOval(610,420,20,20);
   }
  }
 }
}

Vielen Dank für die Hilfe
H.
 
S

SlaterB

Gast
ohne add() geht gar nix

stelle aber lieber am Anfang die GUI komplett zusammen, ändere später nur die Werte fürs (erneute) paintComponent,
ohne super-Aufruf oder Löschen dürfte dort übrigens alles übereinandergemalt werden,
kein Grundlagen-Beispiel vorher angeschaut?
 
H

Hertz

Gast
Danke für die Antwort, leider hab ich nichts konkretes gefunden als Grundlagenbeispiel, müsste wohl mehr surfen.

Das mit dem add(), meinst du so was [c]panel.add(BorderLayout.SOUTH, w);[/c] ?

Mit dem übermalen wirds ein Problem sein. Wie meinst du das mit dem super-Aufruf und dem löschen?
 
S

SlaterB

Gast
> Das mit dem add(), meinst du so was panel.add(BorderLayout.SOUTH, w); ?

etwas abwegig, wo du doch vorher drei andere Komponenten einfach nur mit add() hinzugefügt hast?:
Java:
  panel.add(anzahlWürfel);
  panel.add(button);
  panel.add(label);
ein BorderLayout ist in panel ja auch gar nicht vorhanden

du solltest schon ungefähr eine Vorstellung von Layout usw. haben,
jedenfalls mindestens die Komponente erfolgreich am Anfang einfügen,
nicht gleichzeitig mit komplizierten Button/ späteren Einfügen auch noch grundsätzliche add()-Probleme angehen

> Wie meinst du das mit dem super-Aufruf und dem löschen?

etwa
Galileo Computing :: Java ist auch eine Insel - 14 Einführung in grafische Oberflächen
14.9.3 Zeichnen von Inhalten auf ein JFrame
das erste Beispiel lautet
Java:
package com.tutego.insel.ui.graphics;

import java.awt.Graphics;
import javax.swing.*;

class DrawPanel extends JPanel
{
  @Override
  protected void paintComponent( Graphics g )
  {
    super.paintComponent( g );
    g.drawLine( 10, 10, 100, 50 );
  }
}

zudem steht da noch der Satz
Der Aufruf von super.paintComponent() ist immer dann angebracht, wenn die Oberklasse ihre Inhalte zeichnen soll. Bei vollständig eigenem Inhalt ist das nicht notwendig.
ok, spricht etwas gegen mich,
erst bei mehrfachen Zeichnen wird man schon merken ob jedes Zeichnen über den anderen stattfindet
oder zwischendurch das vorher gezeichnete entfernt wird,
das ist so früh noch nicht besprochen in dem Link
 
H

Hertz

Gast
Das mit dem Layout war ein Fehler. Der BorderLayout ist der standard Layout für frames, und FlowLayout für panels.

Hab den Link gelesen Danke. Jedoch frage ich mich, wie das im Zitat gemeint ist, bezogen auf diesen code. Ob das ein vollständiger eigener Inhalt ist.
Wobei welche Oberklasse zeichnet ihre Inhalte, seh nicht ganz in der Hirarchie durch?


Habe diesen Code in ActionPerformed gesetzt?
Java:
Grafikwürfel w = new Grafikwürfel();
    panel.add(w);
    panel.validate();

Vielen Dank
H.
 
S

SlaterB

Gast
> Wobei welche Oberklasse zeichnet ihre Inhalte, seh nicht ganz in der Hirarchie durch?

nenn es einfach Swing, Swing macht schon was, z.B. eingefügte Buttons auch noch malen,
wobei ich persönlich nie empfehle, in einem Panel mit überschriebener paintComponent noch Komponenten reinzusetzen,

worauf ich mich die ganze Zeit bezog war ein einfaches Löschen der Anzeige des Panels vor jedem paintComponent, etwa bei repaint(),
kann man durch eigene Zeichenbefehle, z.B. drawRect() in Hintergrundfarbe, natürlich genauso hinbekommen
 
H

Hertz

Gast
Hi,

Leider funktioniert noch nicht so wie es sollte, also die Combobox und das Label werden angezeigt.
Aber es wird nichts gezeichnet.

Die actionPerformed Klasse sieht momentan so aus.

Java:
public class WurfListener implements ActionListener {
  public void actionPerformed(ActionEvent ev) {
   //würfeln
   String augenZahl = "";
   String auswahl = (String) anzahlWürfel.getSelectedItem();
   int anzahlZuWerfende = Integer.parseInt(auswahl);
   for (int i = 0; i < anzahlZuWerfende; i++) {
    z = (int) ((Math.random() * 6) +1);
    augenZahl += (" " + z);
    Grafikwürfel w = new Grafikwürfel();
    panel.add(w);
    panel.repaint();
    panel.validate();
   }
   label.setText(augenZahl);
  }
 }

Was müsste man ändern?
 
S

SlaterB

Gast
noch einmal: funktioniert es ohne ActionListener, wenn du einfach nur am Anfang ein Panel einfügst (zum Rest)?
versuche doch erst die einfachen Varianten..

was du dagegen kaum wissen kannst, durchaus viele Gemeinheiten bei Swing:
ich vermute hier das Problem, dass dein Panel die Größe 1x1 Pixel hat, setze setPreferredSize(),
wenn du ein derartiges Panel in ein BorderLayout (wie das JFrame/ ContentPane es hat) einfügst, wird es maximiert,
beim FlowLayout eines anderen Panel nicht
 
H

Hertz

Gast
Ja stimmt, habe jetzt den panel auf BorderLayout.NORTH gesetzt und Borderlayout.CENTER für das zeichnen.
Vielleicht nicht so optimal, da im Lehrbuch drauf hingewiesen wurde JPanel über JFrame zusetzen.

Ok, jetzt müsste man nur noch die Würfel dazu bringen, mehrmals zu erscheinen, meld mich sonst wieder.

Vielen Dank für die Hilfe.

Good Night
H.
 


Schreibe deine Antwort... und nutze den </> Button, wenn du Code posten möchtest...
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Java GUI - Würfel Programm AWT, Swing, JavaFX & SWT 6
M JavaFX Image View Würfel berechnen AWT, Swing, JavaFX & SWT 3
T 3D-Grafik (Java3D) Aus einem Objekt einer Szene (Würfel, Ebene) die wichtigen Randkoordinaten auslesen AWT, Swing, JavaFX & SWT 3
D 3D-Grafik Erstellen vieler gleicher Würfel AWT, Swing, JavaFX & SWT 5
M 3D-Grafik verschiedene Texturen auf einen Würfel mappen AWT, Swing, JavaFX & SWT 15
N Würfel AWT, Swing, JavaFX & SWT 11
M Mandelbrot mit BigDecimal erstellen und in der UI zeichnen, funktionierte nicht. AWT, Swing, JavaFX & SWT 1
H JavaFX Canvas neu zeichnen anstoßen AWT, Swing, JavaFX & SWT 34
H Transparent zeichnen mit drawImage in paintComponent Methode AWT, Swing, JavaFX & SWT 3
N JavaFX Unicode zeichnen in javafx Label verwenden AWT, Swing, JavaFX & SWT 2
G 2D-Grafik Grafik in zwei verschiedenen Fenstern gleichzeitig zeichnen AWT, Swing, JavaFX & SWT 9
S Event Handling Neu zeichnen nur wenn Berechnung fertig ist AWT, Swing, JavaFX & SWT 4
W JavaFX Ich kann keinen Kreis richtig zeichnen AWT, Swing, JavaFX & SWT 8
CptK Funktionsgraphen effizient zeichnen und nur Teile von JPanel erneuern AWT, Swing, JavaFX & SWT 2
G Dreieck aus Pixeln zeichnen AWT, Swing, JavaFX & SWT 8
N Mit KeyListener ein rechteck zeichnen AWT, Swing, JavaFX & SWT 9
B 2D-Grafik paintcomponent Probleme beim zeichnen AWT, Swing, JavaFX & SWT 10
Z Swing Graph zeichnen lassen AWT, Swing, JavaFX & SWT 16
O Kann kei neues Panel zum zeichnen aufrufen... AWT, Swing, JavaFX & SWT 4
L Swing zeichnen AWT, Swing, JavaFX & SWT 14
S GUI Kreuz zeichnen und Position ausgeben AWT, Swing, JavaFX & SWT 3
S GUI Kreis zeichnen AWT, Swing, JavaFX & SWT 13
S Swing Rechteck über JTable zeichnen (per MouseListener) AWT, Swing, JavaFX & SWT 1
L Swing Ein Rechteck in ein Grid Zeichnen AWT, Swing, JavaFX & SWT 5
L JavaFX Animation, erst zeichnen dann anzeigen AWT, Swing, JavaFX & SWT 4
K Mehrere Linien zeichnen AWT, Swing, JavaFX & SWT 8
E Transparent zeichnen AWT, Swing, JavaFX & SWT 2
S AWT Probleme beim Zeichnen AWT, Swing, JavaFX & SWT 3
T Tic Tac Toe - GUI Linien zeichnen AWT, Swing, JavaFX & SWT 14
C Applet Zeichnen über Button-Click AWT, Swing, JavaFX & SWT 13
Soloeco Graph zeichnen AWT, Swing, JavaFX & SWT 1
G Zeichnen Programm AWT, Swing, JavaFX & SWT 1
I Graph mit Swing zeichnen AWT, Swing, JavaFX & SWT 8
H Swing + Paint: Mehrere Objekte zeichnen lassen AWT, Swing, JavaFX & SWT 3
W Swing JPanel nur einmal nach mehreren Änderungen neu zeichnen AWT, Swing, JavaFX & SWT 1
D Quadrat, Rechteck zeichnen AWT, Swing, JavaFX & SWT 3
K Probleme beim zeichnen mit paintComponent() AWT, Swing, JavaFX & SWT 1
JG12111989 mehrere Polyline-Objekte zeichnen AWT, Swing, JavaFX & SWT 3
A Swing JRadioButton zeichnen nicht AWT, Swing, JavaFX & SWT 4
J Swing Vertikales Zeichnen eines Strings mit Java2D AWT, Swing, JavaFX & SWT 1
7 JavaFX Problem beim Zeichnen eines Dreiecks in einem GUI AWT, Swing, JavaFX & SWT 6
P 2D-Grafik Bogen(Arc) zwischen zwei Punkten zeichnen AWT, Swing, JavaFX & SWT 2
F Java Swing Rechteck in JPanel zeichnen AWT, Swing, JavaFX & SWT 7
KilledByCheese Swing 2D JLabel Array Maze zeichnen AWT, Swing, JavaFX & SWT 2
S Parallele Linien zeichnen AWT, Swing, JavaFX & SWT 5
J Linien auf JPanel zeichnen AWT, Swing, JavaFX & SWT 3
P AWT Canvas freihändig zeichnen AWT, Swing, JavaFX & SWT 1
llabusch Linien in JPanel zeichnen AWT, Swing, JavaFX & SWT 6
S passende PaintComponent ? Zeichnen in TextArea mit Scrollpane ? AWT, Swing, JavaFX & SWT 2
I Applet BlueJ Applet - Bild mit if-Schleife zeichnen lassen AWT, Swing, JavaFX & SWT 16
L JavaFX JavafX Timelime zeichnen und schön stylen? AWT, Swing, JavaFX & SWT 2
I JFrame neu zeichnen, nicht überzeichnen! AWT, Swing, JavaFX & SWT 2
I Spielsteine zeichnen und entfernen AWT, Swing, JavaFX & SWT 3
H JavaFX Freezes beim Zeichnen mit Canvas AWT, Swing, JavaFX & SWT 3
H Swing BufferedImage zeichnen AWT, Swing, JavaFX & SWT 1
M JFreeChart neu zeichnen sich Wenn Jtable sich ändert AWT, Swing, JavaFX & SWT 5
S 2D-Grafik MouseDragged Linien zeichnen AWT, Swing, JavaFX & SWT 4
M Zeichnen ohne vorherige Linien zu löschen AWT, Swing, JavaFX & SWT 2
T Problem beim Zeichnen von Rechteck AWT, Swing, JavaFX & SWT 3
T Swing / Kreis zeichnen AWT, Swing, JavaFX & SWT 2
I Text zur Linie zeichnen AWT, Swing, JavaFX & SWT 1
I Pfeil zeichnen am Ende einer Linie AWT, Swing, JavaFX & SWT 1
D 2D-Grafik Inhalt eines Graphics in anderes Graphics zeichnen.... AWT, Swing, JavaFX & SWT 3
F Zeichnen des Button AWT, Swing, JavaFX & SWT 4
B Zeichnen mit paintComponent? Oder anders? AWT, Swing, JavaFX & SWT 15
C Swing Aus verschiedenen Klassen zeichnen. AWT, Swing, JavaFX & SWT 2
C Swing BufferedImage zeichnen und JLabels setzen. AWT, Swing, JavaFX & SWT 17
M Kein Zeichnen der Figuren auf JPanel AWT, Swing, JavaFX & SWT 4
J JButton neu zeichnen lassen AWT, Swing, JavaFX & SWT 9
S Quadrat auf Frame zeichnen AWT, Swing, JavaFX & SWT 2
P Image oder Icon auf Tooltip zeichnen AWT, Swing, JavaFX & SWT 4
C Graphics Objekt in Zeitschleife zeichnen AWT, Swing, JavaFX & SWT 4
X Swing JPanel mehrere Ebenen zeichnen AWT, Swing, JavaFX & SWT 13
G Zeichnen auf eine schwergewichtige Komponente? AWT, Swing, JavaFX & SWT 0
G Mehrere Strings um Kreis zeichnen und positionieren AWT, Swing, JavaFX & SWT 0
P SWT Nebula Gallery - Bildbereiche zeichnen AWT, Swing, JavaFX & SWT 3
A Swing Paint mit Button Clear den Hintergrund säubern um wieder zeichnen zu können AWT, Swing, JavaFX & SWT 2
A 2D-Grafik Zeichnen einer sich bewegenden Box mit BufferStrategy zieht Spur AWT, Swing, JavaFX & SWT 2
T AWT Bild laden und transparent zeichnen AWT, Swing, JavaFX & SWT 2
Helgon Swing Mit Swing zeichnen / NetBeans GUI AWT, Swing, JavaFX & SWT 11
M JLabel über JButtons zeichnen AWT, Swing, JavaFX & SWT 4
J JApplet und Zeichnen AWT, Swing, JavaFX & SWT 8
P 2D-Grafik NPE beim Zeichnen auf Graphics g AWT, Swing, JavaFX & SWT 8
4 Swing Graphen selber zeichnen AWT, Swing, JavaFX & SWT 2
T Über mehrere Panel zeichnen AWT, Swing, JavaFX & SWT 2
T Zeichnen von getSubimage funktioniert nicht AWT, Swing, JavaFX & SWT 7
M Bilder zeichnen, NullPointer Exception AWT, Swing, JavaFX & SWT 3
N JPanel neu zeichnen AWT, Swing, JavaFX & SWT 10
D Zeichnen eines Barplots AWT, Swing, JavaFX & SWT 2
bluerob Problem beim Image zeichnen via andere Klasse AWT, Swing, JavaFX & SWT 7
M Swing JFrame in einem Panel zeichnen AWT, Swing, JavaFX & SWT 3
M Suche Javabibliothek zum Zeichnen mathematischer Funktionen AWT, Swing, JavaFX & SWT 11
M Swing Warum öffnen sich beim Zeichnen mit Swing plötzlich zwei Fenster? AWT, Swing, JavaFX & SWT 5
P ScrollPane nach zeichnen dynamisch resize AWT, Swing, JavaFX & SWT 7
M Swing In GUI-Builder-JFrame mit Menü Schreiben und Zeichnen AWT, Swing, JavaFX & SWT 4
N 2D-Grafik 2 Probleme beim zeichnen AWT, Swing, JavaFX & SWT 18
S Swing Bild auf jPanel nach Änderung von JComboBox zeichnen AWT, Swing, JavaFX & SWT 4
C Funktionen zeichnen AWT, Swing, JavaFX & SWT 16
P JPanel neu zeichnen AWT, Swing, JavaFX & SWT 10
M Auf einem Hintergrundbild zeichnen AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben