Swing JButton paintComponent überschreiben

KingEldarion

Bekanntes Mitglied
Hi,

ich versuche gerade meine Buttons zu gestalten, da die Standartjavabuttons ja sehr hässlich sind.
Also habe ich mich rangemacht und eine neue Klasse erstellt die von JButton erbt erstellt.
Nun habe ich die paintComponent und die Methode paint überschrieben:

Java:
public GButton(String text, int x, int y){
		
		this.text = text;
		
		setBounds(x, y, 250, 25);
		addMouseListener(this);
		setContentAreaFilled(false);
		
		URL url = null;
		
		try {
			url = getClass().getClassLoader().getResource("pic/button.png");
			backPic = ImageIO.read(url);
			url = getClass().getClassLoader().getResource("pic/buttonHover.png");
			hoverPic = ImageIO.read(url);
			url = getClass().getClassLoader().getResource("pic/buttonClick.png");
			clickPic = ImageIO.read(url);
		} 
		catch (IOException e) {
			System.out.println("Error: " + e);
			new ErrorMessage("" + e);
		}
	}
	
	@Override
	public void paintComponent(Graphics g){
		
	}
	
	@Override
	public void paint(Graphics g){
		if(hover){
			if(click){
				g.drawImage(clickPic, getX(), getY(), null);
			}
			else
			{
				g.drawImage(hoverPic, getX(), getY(), null);
			}
		}
		else
		{
			g.drawImage(backPic, getX(), getY(), null);
		}
		
		g.drawString(text, getX(), getY());
	}

Das Ergebnis sind nur leider so aus, dass das Bild nicht gezeichnet werden, der String aber schon, warum?

MfG KingEldarion
 

Michael...

Top Contributor
Grundsätzlich sollte man bei Swing Komponenten
- paintComponent überschreiben und die paint nach Möglichkeit in Ruhe lassen
- darin als ersten Aufruf am besten super.paintComponent aufrufen (sofern man nicht eh die komplette überpinselt)

Dann stellt sich noch die Frage wo sind die Variablen hover... deklariert und wo werden Sie gesetzt?

###EDIT
Wenn Du sowieso alles überschreibst/selbst implementierst macht es eigentlich keinen Sinn von JButton zu erben. Da könnte man direkt von JPanel oder JComponent erben.
 
Zuletzt bearbeitet:
S

SlaterB

Gast
hast du das Bilder- + String-Malen alles schon ausführlich in unverfänglichen normalen Zeichenflächen getestet?

zufällig ist es so, dass für einen String der y-Wert die Unterkante ist, es wird darüber gemalt,
für ein Bild bzw. meistens ist y aber die Oberkante, es wird darunter gemalt,

falls y genau die Unterkante des Label-Zeichenbereichs ist, dann würde genau der String noch zu sehen sein, das Bild nicht..,

male testweise bisschen mehr, eine horizontale Linie bei Y, bei Y -10 usw., versetze das Bild etwas höher,

ganz generell ist es fraglich, die x/y Koordinaten des Labels, welches zur Positionierung im äußeren Layout (null-Layout?) gedacht sind,
für das interne Zeichnen zu verwenden,
was wird bisher als x + y übergeben, kleine Werte im Bereich von 25 für y? alles andere würde wohl eh nicht funktionieren im Moment,

wenn das Label die Höhe 25 bekommt, dann arbeite mit diesem 25er-Bereich, und x von 0 bis 250,
ganz egal wo auf dem Bildschirm positioniert


wieso überschreibst du eigentlich paint und nicht paintComponent?
mag sein dass nur in letzterer die lokalen Koordinanten besonders wichtig sind,
arbeite unbedingt dort und vergesse den super-Aufruf zu Beginn nicht

als erstes male eine schönes gefülltes grünes Rechteck von -1000 bis +1000, ist das bzw. etwas davon zu sehen?
wenn ja dann langsam näher an den sicht-/bemalbaren Bereich herantasten
 

KingEldarion

Bekanntes Mitglied
Danke,

es klappt wenn ich die Bilder auf x und y = 0 setze, wiedermal dämlich von mir...
Die Paintmethode muss ich ja aber überschreiben, da ich sonst weiterhin den Rahmen des StandartButtons habe, ich möchte aber meine komplett eigene Buttons habe und das funktioniert jetzt auch, aber ich habe noch eine kleine Frage, wie kriege ich bei dem drawString hin, dass ich die Schriftgröße einstellen kann?

Ich weiß wie ich die Farbe und den Font ändern kann, aber es gibt keine setter Methode für die Schriftgröße, oder mache ich das mit Font?

MfG KingEldarion
 

Michael...

Top Contributor
Die Paintmethode muss ich ja aber überschreiben, da ich sonst weiterhin den Rahmen des StandartButtons habe, ich möchte aber meine komplett eigene Buttons habe und das funktioniert jetzt auch,
Da Du - so wie es aussieht - gar nichts von JButton nutzt, macht es keinen Sinn von JButton zu erben (s. mein EDIT)
Ich weiß wie ich die Farbe und den Font ändern kann, aber es gibt keine setter Methode für die Schriftgröße, oder mache ich das mit Font?
Man kann beim Graphics Objekt per setFont(Font) einen beliebigen Font setzen. Den kann man direkt per new Font(....) selbst erzeugen oder per deriveFont(...) von einem bestehenden ableiten.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N JButton über benutzerdefinierte paintComponent setzen AWT, Swing, JavaFX & SWT 3
T Kuchendiagramm - mit paintComponent nach JButton druck zeich AWT, Swing, JavaFX & SWT 4
G JButton mit importFiles-Funktion auf JDrawPane AWT, Swing, JavaFX & SWT 5
B JButton Search AWT, Swing, JavaFX & SWT 8
B Swing JButton mit KeyListener AWT, Swing, JavaFX & SWT 3
L JButton durch Mausklick auslösen und Enter-Taste AWT, Swing, JavaFX & SWT 2
N Erlennen ob JButton gedrückt ist AWT, Swing, JavaFX & SWT 6
D JButton Form verändern AWT, Swing, JavaFX & SWT 4
R Grafik per JButton laden und austauschen lassen AWT, Swing, JavaFX & SWT 14
SvenPittelkow Programm soll auf JButton warten bis der geklickt wurde AWT, Swing, JavaFX & SWT 1
Badebay Problem mit JButton AWT, Swing, JavaFX & SWT 2
Z Swing Drag and Drop mit einem JButton AWT, Swing, JavaFX & SWT 1
Z Swing Kann man auf JButton zeichenen AWT, Swing, JavaFX & SWT 3
J JButton Icon hinzufügen AWT, Swing, JavaFX & SWT 5
U Swing JButton mit Icon AWT, Swing, JavaFX & SWT 7
ms_cikar Jbutton erzeugt neue Buttons 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
A Swing JButton mit Pfeiltasten bewegen AWT, Swing, JavaFX & SWT 6
F Swing Scrollbare Liste von JButton AWT, Swing, JavaFX & SWT 4
Hatsi09 JButton text layout AWT, Swing, JavaFX & SWT 9
J JButton zum ändern Der Schriftart/Schriftgröße AWT, Swing, JavaFX & SWT 2
A Swing JButton aussehen AWT, Swing, JavaFX & SWT 12
J jButton soll nach klicken eine Variable um 1 erhöhen AWT, Swing, JavaFX & SWT 2
Legi Swing JButton Icon verschiebt sich AWT, Swing, JavaFX & SWT 2
T Swing Änderung des ActionListener Events nach Klick auf JButton AWT, Swing, JavaFX & SWT 2
S Swing JButton verschwindet nach Compilieren AWT, Swing, JavaFX & SWT 8
B Swing Posistion von JButton auslesen gibt immer 0 aus AWT, Swing, JavaFX & SWT 1
J Thread kennt JButton nicht. AWT, Swing, JavaFX & SWT 11
G Swing JButton ändert (unerwünscht) Größe bei Ausführung AWT, Swing, JavaFX & SWT 4
MR._FIRE_Flower Variable setzten mit JButton AWT, Swing, JavaFX & SWT 5
S Mit JButton neues Fester öffnen und das alte schließen AWT, Swing, JavaFX & SWT 3
T JButton wird beim vergrößern des Fensters erst sichtbar AWT, Swing, JavaFX & SWT 4
R Swing Verändern der Ausrichtung JButton und neu anzeigen AWT, Swing, JavaFX & SWT 2
G Swing JButton - Keine Klickanimation AWT, Swing, JavaFX & SWT 4
Joker4632 JButton nicht sichtbar, aber funktionsfähig AWT, Swing, JavaFX & SWT 8
B Swing JButton deaktivieren, wenn nicht alle JTextFields ausgefüllt sind. AWT, Swing, JavaFX & SWT 2
D JButton per Tastenkombi auswählen AWT, Swing, JavaFX & SWT 2
K JButton nicht sichtbar machen für User 2 AWT, Swing, JavaFX & SWT 4
L Swing JButton soll link öffnen AWT, Swing, JavaFX & SWT 1
K JButton auf anderer Klasse AWT, Swing, JavaFX & SWT 6
A JButton soll durch anklicken die Farbe wechseln AWT, Swing, JavaFX & SWT 8
T KeyListener funktioniert nicht wenn ich ein JButton hinzufüge AWT, Swing, JavaFX & SWT 1
R Swing ActionListener bei JButton AWT, Swing, JavaFX & SWT 9
B JButton -> Rahmen wegbekommen AWT, Swing, JavaFX & SWT 7
T JButton überlagern sich und werden erst beim Mausscrollen sichtbar AWT, Swing, JavaFX & SWT 2
B JButton erscheint in JFrame, obwohl er diesem nicht zugeordnet wurde! AWT, Swing, JavaFX & SWT 1
M JButton Probleme AWT, Swing, JavaFX & SWT 14
T Klasse über JButton schließen AWT, Swing, JavaFX & SWT 4
M Textfarbe JButton verändern AWT, Swing, JavaFX & SWT 2
N JButton ausblenden AWT, Swing, JavaFX & SWT 2
M Swing jButton Text verschwindet AWT, Swing, JavaFX & SWT 2
C Swing JButton wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
stylegangsta JLabel durch Klick auf JButton einblenden AWT, Swing, JavaFX & SWT 16
stylegangsta Eigene Klasse für JButton aus dem JFrame abrufen AWT, Swing, JavaFX & SWT 29
stylegangsta MouseEvents aus JButton aufrufen AWT, Swing, JavaFX & SWT 3
stylegangsta JButton Transparent anzeigen AWT, Swing, JavaFX & SWT 9
stylegangsta JButton Fehelr javax.swing.ImageIcon.<init>(Unknown Source) AWT, Swing, JavaFX & SWT 24
X Swing JButton's zum JScrollPane hinzufügen geht nicht. Bitte um Hilfe. AWT, Swing, JavaFX & SWT 9
D JButton - Nur Icon anzeigen / transparenter Hintergrund AWT, Swing, JavaFX & SWT 2
S JButton-Label vergrößern AWT, Swing, JavaFX & SWT 2
J Swing Basics - JButton funktioniert nicht. AWT, Swing, JavaFX & SWT 1
L JButton mit ImageIcon/Fehlermeldung AWT, Swing, JavaFX & SWT 1
D jButton Problem, ein Rieser Button bedeckt das ganze frame AWT, Swing, JavaFX & SWT 1
L Array mit JButton, wie rausfinden auf welche JButton geklickt wurde + index des JButtons ausgeben AWT, Swing, JavaFX & SWT 4
K (GUI) JButton Farbe bei druck ändern AWT, Swing, JavaFX & SWT 3
L JButton mit Image AWT, Swing, JavaFX & SWT 5
fLooojava JButton [Focus) AWT, Swing, JavaFX & SWT 4
M JButton - Listener AWT, Swing, JavaFX & SWT 1
D jButton auf von jFrame erzeugtem jDialog AWT, Swing, JavaFX & SWT 16
L JButton flackern - Programm hängt sich auf AWT, Swing, JavaFX & SWT 3
L JButton - Größe anders als erwartet AWT, Swing, JavaFX & SWT 2
1 JButton nach Klick ausblenden AWT, Swing, JavaFX & SWT 6
X Swing 1 JButton bedeckt meine ganze Frame aber Warum? AWT, Swing, JavaFX & SWT 2
S Größe und Farbe vom JButton festlegen AWT, Swing, JavaFX & SWT 2
H Swing JList/JTable mit JButton, JTextField, Image, JComboBox und JLable AWT, Swing, JavaFX & SWT 2
J JButton neu zeichnen lassen AWT, Swing, JavaFX & SWT 9
S JButton u. Label auf paint-Methode AWT, Swing, JavaFX & SWT 1
HoloYoitsu Swing JButton in verschiedenen Winkeln drehen AWT, Swing, JavaFX & SWT 0
J vocab1 = new JButton(""+voc1.get(nr).toString()+""); AWT, Swing, JavaFX & SWT 16
A JButton wird bei ActionListener nicht "angenommen" AWT, Swing, JavaFX & SWT 7
BRoll JButton Text nicht ausblenden ("...") AWT, Swing, JavaFX & SWT 2
I JFrame mit JButton schließen? AWT, Swing, JavaFX & SWT 0
D JList&JButton erst nach Resize des JFRame sichtbar AWT, Swing, JavaFX & SWT 2
J Swing JFrame slideout, wenn JButton gedrückt wurde AWT, Swing, JavaFX & SWT 0
S Swing Rückmeldung für JButton AWT, Swing, JavaFX & SWT 4
R AWT JLabel oder JButton aktualisieren AWT, Swing, JavaFX & SWT 1
L JButton im Frame fest verankern AWT, Swing, JavaFX & SWT 0
M Swing Mix JComboBox - JButton? AWT, Swing, JavaFX & SWT 6
U Event Handling JButton Actionevent: starte Spiel AWT, Swing, JavaFX & SWT 4
E JButton füllt ganzes JPanel auf AWT, Swing, JavaFX & SWT 6
P Verbuggte custom JButton unter Windows AWT, Swing, JavaFX & SWT 9
W Swing JButton lässt sich nicht anzeigen AWT, Swing, JavaFX & SWT 8
Kandum Swing JButton - onclick -> Grafikfehler AWT, Swing, JavaFX & SWT 2
R JButton durch Enter auslösen AWT, Swing, JavaFX & SWT 7
T Swing JButton per Drag&Drop verschieben AWT, Swing, JavaFX & SWT 5
M Problem mit FlowLayout, JLabel und JButton AWT, Swing, JavaFX & SWT 4
M JButton wird von JTree überdeckt AWT, Swing, JavaFX & SWT 4
D Swing JButton.setenabled(true) funktioniert nicht AWT, Swing, JavaFX & SWT 12
B JButton ausblenden AWT, Swing, JavaFX & SWT 12

Ähnliche Java Themen

Neue Themen


Oben