Swing Kreise auf JPanel zeichnen

G

Gast2

Gast
Hi,
ich versuche grade verkrampft ein paar Kreise auf ein bestehendes JPanel zu zeichen.
Meine GUI habe ich mir mit Netbeans zusammengebastelt und ein leeres JPanel an der Stelle erstellt wo ich meine Kreise darstellen will (8 Stück, entweder Grün oder Rot).
Nun hab ich versucht direkt auf dem JPanel zu zeichnen, aber da hat sich nicht getan.
Komme ich nicht drumherum mir eine eigene Klasse zu erstellen die von JPanel erbt und in der ich mir dann meine Kreise zeichne?
 

agentone

Bekanntes Mitglied
Nein, du kommst nicht drumherum.
Zumindest nicht mit der Standard-Swing-api bzw. awt-api. Also erweitere JPanel und überschreibe dann paintComponent(Graphics g)
 

MQue

Top Contributor
Schau dir mal das Buch bzw. die Beispiele des Buches Filthy Rich Clients (Chapter 2 und Chapter 3) an.
Unten ein Beispiel wie man mit paintComponent zeichnen kann.

Java:
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class OvalComponent extends JComponent {

    public void paintComponent(Graphics g) {
        g.setColor(getBackground());
        g.fillRect(0, 0, getWidth(), getHeight());
        g.setColor(Color.GRAY);
        g.fillOval(0, 0, getWidth(), getHeight());
    }
    
    private static void createAndShowGUI() {    
        JFrame f = new JFrame("Oval");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setSize(200, 200);
        f.add(new OvalComponent());
        f.setVisible(true);
    }
    
    public static void main(String args[]) {
        Runnable doCreateAndShowGUI = new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        };
        SwingUtilities.invokeLater(doCreateAndShowGUI);
    }
}
 
G

Gast2

Gast
Hi,
danke für die Antworten.
Ist zwar schade dass ich nicht direkt auf dem JPanel zeichnen kann, aber so funktionierts auch ganz gut :)

@MQue
Ich habe dein Beispiel verwendet, musste allerdings noch einen LayoutManager setzen. Aber funktioniert sonst tadellos.

Eine kleine Frage habe ich noch:
Ich möchte 8 Kreise nebeneinander darstellen die mir anzeigen ob ein Bit gesetzt ist oder nicht. Dazu übergebe ich meiner Komponente im Kontruktor ein byte.
Gibt es in Java eine Methode z.b. isBitSet(byte b) ? Oder muss ich mir das selbst ausrechnen?
 
G

Gast2

Gast
Danke, genau das habe ich gesucht.

Meine Klasse sieht bisher so aus (das BitSet füge ich noch hinzu):
Java:
public class StatusPanel extends JComponent {
    private byte state;
    
    private final int NUM_LEDS = 8;
    private final int RADIUS = 10;

    public StatusPanel(byte state) {
        this.state = state;
        setLayout(new FlowLayout());
    }

    public void paintComponent(Graphics g) {
        
        
        for (int i = 0; i < NUM_LEDS; i++) {
            if (isBitSet(i)) {
                g.setColor(Color.GREEN);
            } else {
                g.setColor(Color.RED);
            }
            g.fillOval(i * RADIUS, 0, RADIUS, RADIUS);
        }
    }

    private boolean isBitSet(int i) {
        return false; // TODO:
    }
}

Ich wollte mir damit dann 8 Kreise Zeichnen lassen. Allerdings wird immer nur einer dargestellt. Wähle ich als radius z.b. 20 zeigt er mir nur einen Viertelkreis an, ich denke die Größe wird nicht angepasst. Habe im Kontruktor schon versucht setDimension(NUM_LEDS * RADIUS, RADIUS) oder setBounds. Hat beides nicht geholfen.
Muss ich die Größe irgendwo anders festlegen?
 
S

SlaterB

Gast
setLayout weg,
setPreferredSize() evtl. setzen, hängt aber auch davon ab, wo die Komponente eingefügt wird (und dort ist dann das Layout wichtig)
 
G

Gast2

Gast
Danke, die zwei Tips waren die Lösung.
Nochmal kurz zurück zum BitSet. Um da die Bits zu setzen muss ich ja trotzdem vorher wissen welche Bits in meinem byte gesetz sein, oder wie kann ich das lösen?
 
S

SlaterB

Gast
im BitSet kann man der API nach die Bits abfragen, das war deine Frage, auch wenn eine einfache Methode wie von eRaaaa gepostet einfacher wäre,

jetzt willst du Bits setzen, ein neues Thema, kann man sicher auch machen, habe ich bisher beides noch nicht getestet,
aber wieso sollte das davon abhängen, was vorher gesetzt ist?
und selbst wenn: wo besteht darin das Problem, ob was gesetzt ist kannst du doch herausfinden, oder nicht?
 
G

Gast2

Gast
Den Beitrag von eRaaaa hatte ich nicht gesehen.
Mir ging es darum bei einem byte zu bestimmen welches Bit gesetzt ist. Wenn ich das mit einem BitSet lösen will muss ich ja erst byte -> BitSet konvertieren um dann abfragen zu können ob ein Bit gesetzt ist oder nicht. Daher kam meine Frage wie ich von byte nach BitSet komme...

@eRaaaa
Danke, damit kann ichs lösen :)
 
S

SlaterB

Gast
stimmt, byte to BitSet sehe ich in der API auch nicht auf den ersten Blick, wäre wohl noch zusätzliche unnötige Arbeit
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Hough-Transformation für Kreise und andere Formen AWT, Swing, JavaFX & SWT 3
G AWT AWT Kreise permanent anzeigen AWT, Swing, JavaFX & SWT 3
C JavaFX mehrere Kreise nach Eingabeprozess ausgeben AWT, Swing, JavaFX & SWT 2
P Bestimmte Kreise färben AWT, Swing, JavaFX & SWT 3
wolfgang63 JavaFX Animation, Kreise im vorgegebem Takt durchs Fenster laufen lassen AWT, Swing, JavaFX & SWT 3
J Swing Bild laden, Kreise drin malen, Schreiben AWT, Swing, JavaFX & SWT 2
M Kreise zeichnen AWT, Swing, JavaFX & SWT 6
U Swing Generierung mehrerer Kreise per MouseListener AWT, Swing, JavaFX & SWT 16
E Swing Rechteck und Kreise verschieben AWT, Swing, JavaFX & SWT 3
M Kreise anklicken (Farbänderung) AWT, Swing, JavaFX & SWT 2
P Kreise Rechtecke AWT, Swing, JavaFX & SWT 5
1 GeneralPath-Kreise werden keine Kreise AWT, Swing, JavaFX & SWT 2
M In einem JLabel Kreise zeichnen AWT, Swing, JavaFX & SWT 4
P Zwei JPanel übereianderlegen AWT, Swing, JavaFX & SWT 14
XWing Basic JPanel mit 2 Buttons beutzen. AWT, Swing, JavaFX & SWT 10
G JPanel per Drag and Drop JButtons und Bilder ablegen AWT, Swing, JavaFX & SWT 1
G JPanel mit JButtons und Bilder AWT, Swing, JavaFX & SWT 5
N AWT JPanel zu Jframe hinzufügen AWT, Swing, JavaFX & SWT 2
M clear JPanel before repainting AWT, Swing, JavaFX & SWT 1
B ImageIcon auf JPanel austauschen AWT, Swing, JavaFX & SWT 3
T Swing Reload JPanel + darin liegende ProgressBar AWT, Swing, JavaFX & SWT 9
P Swing Mehrere JLabels mit ImageIcon in JPanel lesen AWT, Swing, JavaFX & SWT 1
E JScrollPane mit JPanel verbinden AWT, Swing, JavaFX & SWT 1
F JPanel Celleditor AWT, Swing, JavaFX & SWT 8
B JPanel-Inhalte inkl. JTextarea zoomen? AWT, Swing, JavaFX & SWT 3
B Mit ContentPane werden Komponenten angezeigt, mit SplitPane, JPanel nicht? AWT, Swing, JavaFX & SWT 6
CptK Funktionsgraphen effizient zeichnen und nur Teile von JPanel erneuern AWT, Swing, JavaFX & SWT 2
P Button simpler random auf einem JPanel verteilen? AWT, Swing, JavaFX & SWT 3
O Swing "Eigenes" JPanel wird dem JScrollPane nicht hinzugefügt AWT, Swing, JavaFX & SWT 5
Ich lerne Java. Swing Von JPanel A auf JPanel B zugreifen. AWT, Swing, JavaFX & SWT 4
A JPanel austauschen und Focus geben AWT, Swing, JavaFX & SWT 3
E Auf JPanel malen und davor JComponenten anzeigen AWT, Swing, JavaFX & SWT 12
L JComponent aus JPanel anhand Mausposition ermitteln AWT, Swing, JavaFX & SWT 10
J JPanel wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
B Verschiebbares JPanel "ruckelt" im Randbereich AWT, Swing, JavaFX & SWT 2
S Swing JPanel nimmt keinen KeyListener an AWT, Swing, JavaFX & SWT 7
K JLabel mit Bilder im nicht initialisierten JPanel hinzufügen AWT, Swing, JavaFX & SWT 5
Hatsi09 Swing JPanel Bild einfügen AWT, Swing, JavaFX & SWT 14
L JPanel zeigt keinen Inhalt AWT, Swing, JavaFX & SWT 1
dereki2000 JPanel mit Rückgbe wie bei JOptionPane AWT, Swing, JavaFX & SWT 3
E Hintergrundfarbe setzen in JPanel funktioneirt nicht AWT, Swing, JavaFX & SWT 4
P JPanel KeyListener hinzufügen AWT, Swing, JavaFX & SWT 8
S Nach scrollen verschwindet das zuvor im JPanel gezeichnete AWT, Swing, JavaFX & SWT 2
P Bewegung eines Balkens in eineum JPanel welches als Spielfeld fungiert AWT, Swing, JavaFX & SWT 2
L Swing JPanel Größe anpassen AWT, Swing, JavaFX & SWT 6
D Platzierung von JTextfield in JPanel AWT, Swing, JavaFX & SWT 3
D Swing Anwendung ohne JPanel erstellen AWT, Swing, JavaFX & SWT 1
M Swing JPanel in JScrollPane AWT, Swing, JavaFX & SWT 3
M Zwei JPanel übereinander nur vorderes "repainten" AWT, Swing, JavaFX & SWT 3
J 2D-Grafik Background einer Jpanel Klasse ändern AWT, Swing, JavaFX & SWT 1
J Ziehen eines Buttons im JPanel AWT, Swing, JavaFX & SWT 2
J Button lässt sich nicht auf dem JPanel verschieben AWT, Swing, JavaFX & SWT 5
D zwei JLabel stapeln in einem JPanel AWT, Swing, JavaFX & SWT 5
DaCrazyJavaExpert Swing JPanel "ContentPane" wird nicht gesetzt/angezeigt AWT, Swing, JavaFX & SWT 16
DaCrazyJavaExpert Swing Größe des JPanel ändern/wird nicht geändert. AWT, Swing, JavaFX & SWT 3
DaCrazyJavaExpert Swing JPanel wird in JScollPane nicht angezeigt AWT, Swing, JavaFX & SWT 2
it_is_all JPanel verschwindet nach Button-Klick AWT, Swing, JavaFX & SWT 2
B Bar Plot in Swing JPanel AWT, Swing, JavaFX & SWT 0
F Screenshot eines JPanel AWT, Swing, JavaFX & SWT 3
S JPanel rotieren, Bild ist abgeschnitten, Clipping? AWT, Swing, JavaFX & SWT 0
M Swing JPanel flüssig verschieben AWT, Swing, JavaFX & SWT 5
G Nur ein JPanel wird angezeigt AWT, Swing, JavaFX & SWT 9
kilopack15 JPanel im laufenden Zustand einfärben AWT, Swing, JavaFX & SWT 2
kilopack15 JPanel Farbverwaltung AWT, Swing, JavaFX & SWT 1
A JScrollPane soll JPanel mit JButtons enthalten und eine Scollbar anzeigen AWT, Swing, JavaFX & SWT 1
A Swing JLabels in einer ForEach Schleife an den JPanel anheften (UNO Netzwerkspiel) AWT, Swing, JavaFX & SWT 1
L JPanel zeichnet im Konstrukter erzeugten Hintergrund nicht AWT, Swing, JavaFX & SWT 10
Java_RY wie kann ich auf JButtons in einem JPanel zugreifen AWT, Swing, JavaFX & SWT 3
F Zeichnung einem JPanel im Layoutmanager zuweisen AWT, Swing, JavaFX & SWT 3
Meeresgott Swing Umgang mit JPanel AWT, Swing, JavaFX & SWT 4
R 2D-Grafik PNG Bild per Graphics auf JPanel AWT, Swing, JavaFX & SWT 9
K JPanel Bilder bei Windows nicht darstellbar AWT, Swing, JavaFX & SWT 6
W Swing JPanel nur einmal nach mehreren Änderungen neu zeichnen AWT, Swing, JavaFX & SWT 1
J Swing Zeichenfläche im JPanel des Haupfenster anzeigen lassen AWT, Swing, JavaFX & SWT 4
A Swing JPanel zeigt Buttons nicht an AWT, Swing, JavaFX & SWT 4
R JPanel überzeichnet alles? AWT, Swing, JavaFX & SWT 1
D Von JPanel auf anderes JPanel zugreifen AWT, Swing, JavaFX & SWT 9
L Swing Teile eines JPanel in eigene Klasse auslagern AWT, Swing, JavaFX & SWT 3
I JPanel - Verwaltung/ Anordnung AWT, Swing, JavaFX & SWT 4
T JComponents zur Laufzeit auf JPanel darstellen AWT, Swing, JavaFX & SWT 10
F Java Swing Rechteck in JPanel zeichnen AWT, Swing, JavaFX & SWT 7
J Linien auf JPanel zeichnen AWT, Swing, JavaFX & SWT 3
L ImageIcon auf JPanel wird nicht angezeigt(keiner Fehlermeldung) AWT, Swing, JavaFX & SWT 11
M Swing JPanel innerhalb eines Frames verschieben AWT, Swing, JavaFX & SWT 3
T JTextField Array im JPanel wird nicht komplett angezeigt AWT, Swing, JavaFX & SWT 7
K Swing JPanel ueber komplette Form legen AWT, Swing, JavaFX & SWT 1
W Swing Größenänderung vom JPanel im JScrollPane und anschließendes positionieren AWT, Swing, JavaFX & SWT 2
R Komponenten von JPanel bleiben unsichtbar AWT, Swing, JavaFX & SWT 2
O JTabeddpane aber jedes JPanel als eigene Klasse anlegen AWT, Swing, JavaFX & SWT 7
llabusch Linien in JPanel zeichnen AWT, Swing, JavaFX & SWT 6
I (JPanel) paintComponent mit Zeitverschiebung (Sleep/Wait) AWT, Swing, JavaFX & SWT 1
H Netbeans Designer: Probleme mit JPanel und JFrame AWT, Swing, JavaFX & SWT 2
S jpanel anchor bottom AWT, Swing, JavaFX & SWT 1
thobren Swing Im JPanel wird nur TextArea gelöscht AWT, Swing, JavaFX & SWT 13
A JPanel größe verändern AWT, Swing, JavaFX & SWT 4
G JPanel komponente Löschen AWT, Swing, JavaFX & SWT 7
F JPanel "verschmelzen" GridLayout AWT, Swing, JavaFX & SWT 10
B Dropdown "Einstellungen" auf JPanel, transparent AWT, Swing, JavaFX & SWT 1
D GlassPane für JPanel AWT, Swing, JavaFX & SWT 2
F JPanel "zeichnet" keinen Text AWT, Swing, JavaFX & SWT 14

Ähnliche Java Themen

Neue Themen


Oben