JButton - paintComponent()

MasterEvil

Erfahrenes Mitglied
Hiho, ich habe mir einen Button von JButton abgeleitet um den Hintergrund anders einzufärben.
Das hat auch alles super funktioniert mein Problem jetzt ist allerdings das Text bzw. Icons des Buttons nicht mehr angezeigt werden? ich vermute dass das Rechteck welches ich gezeichnet habe einfach den Text überdeckt? Kann das sein?

Währe also sehr nett wenn mir mal wieder jemand helfen könnte !


Hiermal die abgeleitete Klasse:

Code:
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Rectangle2D;

import javax.swing.JButton;


public class GradientButton extends JButton {
	private static final long serialVersionUID = 7655421903690251574L;
	Color cc = Color.LIGHT_GRAY;
	Color cc2 = Color.WHITE;
	int composite = 3;
	float alpha =(float) 100/100.0f;

	public GradientButton() {
		super();
	}

	 public void setComposite(int com) {
		 composite = com;
		 alpha =(float) 35/100.0f;
		 System.out.println("Nilai diterima: "+ alpha);
		 repaint();
	 }
	 
	 public void paintComponent(Graphics g) {
		super.paintComponent(g);
		Graphics2D g2d = (Graphics2D) g;
		Rectangle2D.Double button = new Rectangle2D.Double(0.0,0.0,getWidth(),getHeight());
		GradientPaint gp = new GradientPaint(0,getHeight(),cc,0,getHeight()/3,cc2,true);
		g2d.setComposite(AlphaComposite.getInstance(composite, alpha));
		g2d.setPaint(gp);
		g2d.fill(button);
		g2d.draw(button);
	}
}
 
Moin,
ich schätze, Du wirst noch ein g2d.drawString benötigen mit dem gewünschten Font und der gewünschten Farbe.
 
Das hilft leider nicht, sofern ich den Hintergrund hinzufüge ( setPaint(gp) ) wird alles andere nicht mehr angezeigt :(

[EDIT]

Hab das ganze jetzt auf ein Minimum reduziert und jetzt klappts.
Das mus irgendwie an der Fill() Methode gelegen haben?

Hier der Code wie es klappt und man kann die Standard-Eigenschaften des Buttons weiterhin nutzen:

Code:
import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JButton;


public class GradientButton extends JButton {
	private static final long serialVersionUID = 7655421903690251574L;

	public GradientButton() {
		super();
		setContentAreaFilled(false);
	}
	
	 public void paintComponent(Graphics g) {
		 final Graphics2D g2d = (Graphics2D) g;
		 Color c1 = Color.LIGHT_GRAY;
		 Color c2 = Color.WHITE;
		 GradientPaint gp = new GradientPaint(0,getHeight(),c1,0,getHeight()/3,c2,true);
		 g2d.setPaint(gp);
		 g2d.fillRect(0,0,getWidth(),getHeight());
		 super.paintComponent(g);
	 }
}
 
Zuletzt bearbeitet:
Dann schau mal, ob es hilft, mit setColor/setBackground zu hantieren. Und achte auf die richtige Reihenfolge...

Ach schon erledigt, auch gut. :)
 
Zurück