Kreis in Jlabel darstellen.

T

trndtap

Gast
Hallo.

Ich möchte Kreise auf einem JLabel darstellen. Von 1 bis zu 5 Kreisen.
Als Test habe ich gerade mal in Paint einen einfachen Kreis gemalt mit
transparentem Hintergrund und das ganze dann in mein JLabel mit
GridLayout(0, 5) geadded (geadded habe ich in Wahrheit ein weiteres
JLabel mit setIcon(Mein Bild). Das Ergebniss war Katastrophal :)

Man sieht, dass sich in dem 1/5 Bereich des JLabels etwas drüber
gelegt hat, aber was ist nicht zu erkennen. Auch die Transparenz
scheint ignoriert zu werden.

Wie macht man sowas am besten? Kann man das ganze mit Java
vielleicht direkt auf das Label drauf zeichnen wenn es so was
banales wie ein Kreis ist?

Wichtig ist, dass der Hintergrund wirklich transparent ist. ;)
 
T

trndtap

Gast
Ok, danke für den Hinweis ;)

Ich hab dann mal folgende Klasse implementiert:

Java:
public class CellCoin extends JComponent {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	/**
	 * 
	 */
	public CellCoin() {
		this.repaint();
	}
	
	/**
	 * 
	 */
	protected void paintComponent(Graphics g) {
		super.paintComponent(g);
		
		Ellipse2D ellipse = new Ellipse2D.Float(10f,10f,10f,10f);
		
		Graphics2D g2d = (Graphics2D) getGraphics();
		g2d.clearRect(0, 0, getWidth(), getHeight());
		g2d.setColor(new Color(255, 0, 0));
		g2d.fill(ellipse);
		g2d.draw(ellipse);
	}
}

Und füge diese Klasse meinem JLabel mit dem GridLayout(0, 5) hinzu.
Das mache ich in meiner Klasse Cell durch einen Methodenaufruf
im Konstruktor:

Java:
private void updateCoins(int coins) {
	coinsOutput.removeAll();
		
	for(int i = 0; i < coins; i++) {
		coinsOutput.add(new CellCoin());
	}
		
	this.validate();
	this.repaint();
}

coinsOutput ist hierbei das JLabel().

Allerdings passiert hierbei garnichts ^^. Also die Methoden werden aufgerufen,
dass habe ich durch ein System.out geprüft, allerdings wird nichts angezeigt :(
 
T

trndtap

Gast
Ehrlich?

Ich war der Meinung das ein GridLayout für die Größe der Componente sorgt.
Wenn ich z.B. einen JButton hinzufüge ist er sofort genau so groß wie die
vom Layout zur Verfügung gestellte Fläche.

(also 1/5 vom JLabel).
 
T

trndtap

Gast
Und wie ichs mir gedacht habe bringt ein setPreferredSize() nichts :D

Ich habe übrigens noch was geändert was meiner Meinung nach falsch war:

Java:
private void updateCoins(int coins) {
    coinsOutput.removeAll();
        
    for(int i = 0; i < coins; i++) {
        coinsOutput.add(new CellCoin());
    }
        
    coinsOutput.validate();
    coinsOutput.repaint();
}

Das validate() und repaint() muss aufs Jlabel, nicht auf die übergeordnete Komponente, oder?

Jedenfalls gehts so auch nicht :D
 
T

trndtap

Gast
As you wish :D

Java:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;

import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Cell extends JPanel {
	private static final long serialVersionUID = 1L;
	private JLabel coinsOutput = null;
	private int cellID = 0;
	private int coins = 0;
	private boolean choosed = false;

	public Cell(int cellID, int coins) {
		this.cellID = cellID;
		this.coins = coins;
		
		this.setLayout(new GridLayout(0, 1));
		this.setPreferredSize(new Dimension(120, 40));
		this.setBorder(BorderFactory.createLineBorder(Color.black));
		this.setBackground(new Color(220, 220, 220));
		
		this.coinsOutput = new JLabel();
		this.coinsOutput.setLayout(new GridLayout(0, 5));
		this.coinsOutput.setFont(new Font("Monospaced", Font.PLAIN, 20));
		this.coinsOutput.setHorizontalAlignment(JLabel.CENTER);
		this.coinsOutput.setVerticalAlignment(JLabel.CENTER);
		
		this.add(this.coinsOutput);
		this.updateCoins(this.coins);
	}
	
	public int getCellID() {
		return cellID;
	}
	public void setCellID(int cellID) {
		this.cellID = cellID;
	}
	private void updateCoins(int coins) {
		coinsOutput.removeAll();
		
		for(int i = 0; i < coins; i++) {
			coinsOutput.add(new CellCoin());
		}
		
		coinsOutput.validate();
		coinsOutput.repaint();
	}
	public boolean isChoosed() {
		return choosed;
	}
	public void setChoosed(boolean choosed) {
		this.choosed = choosed;
		
		if(choosed) {
			this.setBackground(new Color(220, 220, 220));
		} else {
			this.setBackground(new Color(220, 100, 0));
		}
	}
	public String getCoinsOutput() {
		return coinsOutput.getText();
	}
	public void setCoinsOutput(String coinsOutput) {
		this.coinsOutput.setText(coinsOutput);
	}
}

Java:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Ellipse2D;

import javax.swing.JComponent;

public class CellCoin extends JComponent {
	private static final long serialVersionUID = 1L;

	public CellCoin() {}
	
	protected void paintComponent(Graphics g) {
		super.paintComponent(g);
		
		Ellipse2D ellipse = new Ellipse2D.Float(10f,10f,10f,10f);
		
		Graphics2D g2d = (Graphics2D) getGraphics();
		g2d.clearRect(0, 0, getWidth(), getHeight());
		g2d.setColor(new Color(255, 0, 0));
		g2d.fill(ellipse);
		g2d.draw(ellipse);
	}
}

Java:
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Field extends JFrame {
	private static final long serialVersionUID = 1L;
	private JPanel mainPanel = new JPanel();
	private int amountCells = 0;
	
	public Field(int amountCells) {
		this.amountCells = amountCells;
		
		this.setTitle("BLA");
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setResizable(false);
		
		for(int i = 0; i < this.amountCells; i++) {
			mainPanel.add(new Cell(i, 5));
		}
		
		this.add(mainPanel);
		this.pack();
		this.setLocationRelativeTo(null);
		this.setVisible(true);
	}

	public static void main(String[] args) {
		new Field(4);
	}
}
 
T

trndtap

Gast
Hallo,

habe den Fehler gefunden.
War mal wieder ganz einfach.

Java:
protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        
        Ellipse2D ellipse = new Ellipse2D.Float(10f,10f,10f,10f);
        
        Graphics2D g2d = (Graphics2D) getGraphics(); // hier ist der Fehler. statt gegGraphics() einfach g
        g2d.clearRect(0, 0, getWidth(), getHeight());
        g2d.setColor(new Color(255, 0, 0));
        g2d.fill(ellipse);
        g2d.draw(ellipse);
    }
 
T

trndtap

Gast
Dennoch eine Frage:

Der Kreis wird gezeichnet und ein Weißer Hintergrund wird dahinter
erzeugt. Gibt es eine Möglichkeit diesen Transparent zu machen?
 

Marco13

Top Contributor
Notiz an mich: Die übliche Vorgehensweise, bei ALLEN Fragen, die hier zum Zeichnen gestellt werden, erstmal mit der Browsersuche nach "getGraphics" zu suchen, und ggf. darauf hinzuweisen, dass man das nicht verwenden darf, in Zukunft selbst dann anwenden, wenn jemand schon paintComponent überschreibt.

Graphics2D g2d = (Graphics2D) g;

(Zu 'Cell.java': Einem Label (coinsOutput) ein neues Layout zu verpassen könnte (!) zu Problemen führen. Die meisten Swing-Components, die NICHT reine Zeichen/Container-Components sind (d.h. praktisch alle außer JPanel) haben schon ein bestimmtes Layout, das evtl. schon verwendet wird und nicht geändert werden sollte. OB das hier bei einem JLabel wirklich problematisch ist, weiß ich nicht auswendig, aber es KÖNNTE eben sein...)


EDIT: Weitere Notiz an mich: Nachdem jemand ein KSKB gepostet hast, vor dem Ausprobieren erstmal noch ein bißchen warten, weil der Ersteller damit seinen Fehler vielleicht schon selbst findet :autsch:

Und noch eine: Vor dem Antworten nochmal "Reload" machen, weil vielleicht ein Gast noch was geschrieben hat.
 
Zuletzt bearbeitet:
T

trndtap

Gast
Das sind so einige Notitzen ;)

Wie siehts aus mit der Transparenz? Oder muss ich das mit Images machen.
Das wär bisl doof :D
 

Marco13

Top Contributor
Reicht's nicht einfach das clearRect rauszuwerfen (das ohnehin nicht verwendet werden sollte)? Ggf. noch im Konstruktor der Component
setOpaque(false);
aufrufen
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W JavaFX Ich kann keinen Kreis richtig zeichnen AWT, Swing, JavaFX & SWT 8
L 2D-Grafik Linie von Kreis zu Kreis AWT, Swing, JavaFX & SWT 3
S Kreis vergrößern/verkleinern mit Buttons AWT, Swing, JavaFX & SWT 1
S GUI Kreis zeichnen AWT, Swing, JavaFX & SWT 13
M JavaFX Bild zur ImageView in einem Kreis anzeigen. AWT, Swing, JavaFX & SWT 4
L 2D-Grafik Dreieck in einem Kreis??? AWT, Swing, JavaFX & SWT 1
T Swing / Kreis zeichnen AWT, Swing, JavaFX & SWT 2
G Mehrere Strings um Kreis zeichnen und positionieren AWT, Swing, JavaFX & SWT 0
D Swing Manuellen Kreis zeichen AWT, Swing, JavaFX & SWT 22
J Grafik (Kreis) schneller bewegen? AWT, Swing, JavaFX & SWT 6
E Kreis-Mal-Programm AWT, Swing, JavaFX & SWT 7
S Kreis in Kreis AWT, Swing, JavaFX & SWT 5
P Elemente im Kreis aufstellen AWT, Swing, JavaFX & SWT 5
M 2D-Grafik "Unvollständiger" Kreis(kontur) AWT, Swing, JavaFX & SWT 8
T Einen Kreis anzeigen AWT, Swing, JavaFX & SWT 14
B 2D-Grafik Text in einem Kreis zentrieren AWT, Swing, JavaFX & SWT 3
Semox 2D-Grafik Radialer Verlauf in einem Kreis AWT, Swing, JavaFX & SWT 4
T 2D-Grafik Kreis "von Hand" zeichnen -> jedesmal repaint()? AWT, Swing, JavaFX & SWT 6
P Swing FocusTraversalPolicy dreht sich im Kreis AWT, Swing, JavaFX & SWT 2
J Java2D Kreis/Kurven Frage AWT, Swing, JavaFX & SWT 2
Semox Swing Kreis löschen durch Mausklick in der Nähe AWT, Swing, JavaFX & SWT 2
Dit_ Ein Kreis als Graphics2D oder als Ellipse2D Objekt AWT, Swing, JavaFX & SWT 19
K Wenn Mauszeiger in der Nähe vom Kreis, soll Kreis an eine andere Stelle springen AWT, Swing, JavaFX & SWT 8
Spin Hilfe - Erklärungsbedarf für Kreis AWT, Swing, JavaFX & SWT 5
H Punkte im Kreis AWT, Swing, JavaFX & SWT 3
G kreis malen -> welche funktion? AWT, Swing, JavaFX & SWT 3
G Farbe ändern bei Klick auf einen Kreis AWT, Swing, JavaFX & SWT 5
M Kreis mit gedrückter Maus bewegen AWT, Swing, JavaFX & SWT 20
U Farbe von Kreis AWT, Swing, JavaFX & SWT 3
G Kreis zeichnen und mit Maus ziehen AWT, Swing, JavaFX & SWT 3
S Kreis als JFrame AWT, Swing, JavaFX & SWT 9
TheJavaKid Kreis, Rechteck, Linie. verschieben AWT, Swing, JavaFX & SWT 5
T Kreis ActionListener AWT, Swing, JavaFX & SWT 5
G Problem mit der Anzeige von jLabel. Unlesbar wenn der Text geändert wird. AWT, Swing, JavaFX & SWT 28
C Swing Übergabe von String an JLabel AWT, Swing, JavaFX & SWT 9
H Swing Anpassen der Textgröße im JLabel funktioniert nur bedingt AWT, Swing, JavaFX & SWT 7
Mojo7310 Ändern von Text in JLabel mit einem Button AWT, Swing, JavaFX & SWT 11
raeuchertofu Text von JTextfield und JLabel ändern AWT, Swing, JavaFX & SWT 2
D JLabel übereinanderlegen AWT, Swing, JavaFX & SWT 5
E JLabel kopieren AWT, Swing, JavaFX & SWT 31
R Text vom Jlabel wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
kodela HTML-tags für JLabel AWT, Swing, JavaFX & SWT 9
J Swing JLabel Verknüpfung aktualisieren AWT, Swing, JavaFX & SWT 3
L Swing JLabel wird beim ändern der Schriftart immer neu gezeichnet. AWT, Swing, JavaFX & SWT 2
F JLabel mit ImageIcon per Button bewegen AWT, Swing, JavaFX & SWT 4
H String teilen, damit bei JLabel keine Punkte am Ende angezeigt werden AWT, Swing, JavaFX & SWT 4
S Swing JLabel Text mit der Zeit ändern AWT, Swing, JavaFX & SWT 1
E JLabel AWT, Swing, JavaFX & SWT 1
K JLabel mit Bilder im nicht initialisierten JPanel hinzufügen AWT, Swing, JavaFX & SWT 5
I JLabel neue Zeile AWT, Swing, JavaFX & SWT 4
L JLabel ist verzerrt/größer als eingestellt AWT, Swing, JavaFX & SWT 15
B Observer Pattern JLabel ändern AWT, Swing, JavaFX & SWT 7
R Kann JLabel in ActionListener nicht aufrufen AWT, Swing, JavaFX & SWT 4
E Wie kann ich ein JLabel auf größe der schriftlänge setzten? AWT, Swing, JavaFX & SWT 2
xYurisha JLabel Text einer geöffneten Gui über eine andere Klasse ändern! AWT, Swing, JavaFX & SWT 3
D zwei JLabel stapeln in einem JPanel AWT, Swing, JavaFX & SWT 5
BreakdownBob Swing JLabel verschwindet hinter Image AWT, Swing, JavaFX & SWT 2
L Kalendar als JLabel einfügen AWT, Swing, JavaFX & SWT 3
stroggi Swing Mehrere transparentes Objekte (Grafiken) über einem Bild (JLabel) darstellen AWT, Swing, JavaFX & SWT 4
it_is_all jLabel.setText -> Char in Str: NullpointerException AWT, Swing, JavaFX & SWT 1
4 Swing JLabel wird ,,abgehackt" AWT, Swing, JavaFX & SWT 3
it_is_all JLabel.setIcon - funktioniert nicht mehr AWT, Swing, JavaFX & SWT 2
P Aktualisierung von jLabel in jFrames AWT, Swing, JavaFX & SWT 8
DaCrazyJavaExpert Swing JLabel Klickanimation AWT, Swing, JavaFX & SWT 4
A Swing JLabel als Parameter übergeben AWT, Swing, JavaFX & SWT 9
M JLabel ausrichten AWT, Swing, JavaFX & SWT 2
S JLabel setText() Problem AWT, Swing, JavaFX & SWT 6
Z jLabel von Methode aus aktualisieren AWT, Swing, JavaFX & SWT 7
T JLabel Textinhalt von Oben anzeigen AWT, Swing, JavaFX & SWT 1
N JLabel in JTabbedPane verschieben AWT, Swing, JavaFX & SWT 2
N JLabel ändern während Programm ausgeführt wird AWT, Swing, JavaFX & SWT 4
R Swing JLabel berührung an einem anderen Label prüfen AWT, Swing, JavaFX & SWT 3
Thallius Swing "..." beim JLabel verhindern? AWT, Swing, JavaFX & SWT 3
OlafHD JLabel im JFrame Zentrieren AWT, Swing, JavaFX & SWT 2
T Event Handling JLabel als eigener Button AWT, Swing, JavaFX & SWT 7
T JLabel wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
KilledByCheese Swing 2D JLabel Array Maze zeichnen AWT, Swing, JavaFX & SWT 2
F Abgeleitetes JLabel AWT, Swing, JavaFX & SWT 16
D Swing keine JLabel-Aktualisierung bei "externem" Aufruf durch Helferklasse AWT, Swing, JavaFX & SWT 10
S jLabel HTML Formatierung AWT, Swing, JavaFX & SWT 2
J Statisches JLabel adden AWT, Swing, JavaFX & SWT 4
J JLabel Visible setzen in KeyListener AWT, Swing, JavaFX & SWT 13
T JLabel in die Mitte(JLabel.CENTER geht nicht) AWT, Swing, JavaFX & SWT 12
2 JLabel - setText ändert den Text nicht AWT, Swing, JavaFX & SWT 4
B Jlabel Text von anderen Klasse aus ändern AWT, Swing, JavaFX & SWT 9
stylegangsta JLabel durch Klick auf JButton einblenden AWT, Swing, JavaFX & SWT 16
stylegangsta JLabel anzuzeigenden Text zentrieren AWT, Swing, JavaFX & SWT 9
K Swing unterschied JTextField und JLabel AWT, Swing, JavaFX & SWT 7
F Swing JLabel in JFrame anpassen AWT, Swing, JavaFX & SWT 20
E JLabel aus Runnable ändern AWT, Swing, JavaFX & SWT 2
Z AWT JLabel setzt kein neuen Text AWT, Swing, JavaFX & SWT 6
D JLabel bei Aufruf neue Zeile AWT, Swing, JavaFX & SWT 5
W Swing JLabel jede Sekunde aktualisieren, ohne Timer zu benutzen AWT, Swing, JavaFX & SWT 4
F ListCellRenderer mit JLabel und MouseListener AWT, Swing, JavaFX & SWT 4
F Swing JLabel wird nicht sofort Angezeigt AWT, Swing, JavaFX & SWT 3
D Timer für Bildfolge in einem jLabel AWT, Swing, JavaFX & SWT 5
S JLabel-Text in Methode setzen? AWT, Swing, JavaFX & SWT 2
GreyFox JLabel in laufender Anwendung erzeugen AWT, Swing, JavaFX & SWT 6
H Position eines JLabel in einem JPanel AWT, Swing, JavaFX & SWT 2
Z Auf ein JLabel drauf malen? AWT, Swing, JavaFX & SWT 1

Ähnliche Java Themen

Neue Themen


Oben