# Gibt es Gradient-Button unter Swing?



## Lautsprecher (14. September 2005)

Hi,
bis jetzt benutze ich in meinem JFrame, die normalen JButton, die der VE Eclipse zur Verfügung stellt.
Kennt jemand noch eine Klasse die Gradient-Button zur Verfügung stellt?

Grüße


----------



## Thomas Darimont (14. September 2005)

Hallo!

 Was meinst du genau mit Gradient Button? Einen Farbverlauf als Hintergrund?

```
package de.tutorials;
 
 import java.awt.Color;
 import java.awt.GradientPaint;
 import java.awt.Graphics;
 import java.awt.Graphics2D;
 
 import javax.swing.JButton;
 import javax.swing.JFrame;
 
 public class GradientButtonExample extends JFrame {
 
 	public GradientButtonExample() {
 		super("GradientButtonExample");
 		setDefaultCloseOperation(EXIT_ON_CLOSE);
 
 		JButton btn = new JButton("Push me") {
 			protected void paintComponent(Graphics gra) {
 				Graphics2D g = (Graphics2D) gra;
 				super.paintComponent(g);
 				int w = this.getWidth();
 				int h = this.getHeight();
 
 		    	GradientPaint gradientPaint = new GradientPaint(0.F, 0.F,
 		    			Color.YELLOW, w, h, Color.RED);
 				g.setPaint(gradientPaint);
 				g.fillRect(0, 0, w, h);
 
 				getUI().paint(g, this);
 			}
 		};
 		btn.setBackground(new Color(255, 255, 255, 255));
 
 		add(btn);
 
 		pack();
 		setVisible(true);
 	}
 
 	/**
 	 * @param args
 	 */
 	public static void main(String[] args) {
 		new GradientButtonExample();
 	}
 
 }
```
 
 gruß tom


----------



## Lautsprecher (14. September 2005)

Hi,
Farbverlauf ist soweit egal. Soll einfach ein wenig rausstehen. Sprich 3D.
Dein Beispiel ist schon Spitze. 
Noch eine Anfänger Frage zur Vererbung:

Ich habe zwei Klassen: Klasse A und Klasse GradientButton

In der A wird mein Frame durch getJContentPane() meine Anzeige aufgebaut
Wie greife ich nun auf meine Button-Klasse von hier aus zu:


unter getJContentPane()
GradientButton jBGE = new GradientButton(); einfügen
müsste doch funktionieren

mit public class GradientButton extends A {}

Reicht dass schon oder muss ich von der GradientButton Klasse dann noch was an A übergeben, damit das Zeugs läuft?

Grüße


----------



## Lautsprecher (14. September 2005)

Hi nochmal,

hier genau die Codes?
Wie verbinde ich jetzt die beiden Klassen?


Klasse 1:

```
private JPanel getJContentPane() 
	{
		if (jContentPane == null)
		{
		
		jContentPane = new JPanel();
		jLabel12 = new JLabel();
		jLabel12.setBounds(new java.awt.Rectangle(808, 626, 50, 25));
		jLabel12.setText("Zeit:");
                                jContentPane.add(jLabel, null);
                                GradientButton jBGE = new GradientButton();
                                }
		return jContentPane;
	}
```


Klasse 2:


```
import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
 
import javax.swing.JButton;
import javax.swing.JFrame;
 
public class GradientButton extends ZeiterfassungGlasdeckel{
	
	public static void main(String[]args)
	{
		new GradientButtonExample();
	}
	
	public GradientButtonExamle()
	{
	
	          JButton jbtn = new JButton(){
	        	  protected void paintComponent(Graphics ga)
	        	  {
	        	  Graphics2D g = (Graphics2D)gra;
	        	  super.paintComponent(g);
GradientPaint gradient = new GradientPaint (675,557,Color.GREEN,126,92,Color.GREEN);
                                                  g.setPaint(gradient);
	        		  g.fillRect(675,557,126,92);
	        		  getUI().paint(g,this);
	        	  }
	          };
	          super.add(jbtn);
	
	}
}
```


----------



## Lautsprecher (15. September 2005)

Hi Thomas ich versuch gerade deinen Code in einer seperaten Klasse zu verwurschteln. Leider funktioniert es noch nicht, da ich den Code auch nicht ganz verstehe.
Was macht getUI().paint(g,this); eigentlich genau?
Genaus verstehe ich nicht ganz wie dein Neu angelegter Button jbtn mit diesem hier zusammenhängt:
Graphics2D g = (Graphics2D)gra;
       	  super.paintComponent(g);
         GradientPaint gradient = new GradientPaint 

Kurz gesagt kannst mir mir vielleicht in 3 - 4 Sätzen dein kleines Progrämmchen erklären.

Wäre Klasse
Danke


----------



## Guadrion (3. November 2009)

Hi,
geiler Code^^kann cih das automatisieren, dass das für alle SubComponents der Klasse, in der ich die Funktion überschreib gilt?


----------



## Xandro (4. November 2009)

Moin,

hier mal ein Ergebnis von mir ohne die GradientPaint Klasse:


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

public class GradientButton extends JButton {
    public GradientButton(String name) {
        this.setText(name);
    }

    @Override
    protected void paintComponent(Graphics g) {
        Graphics2D g2d = (Graphics2D) g;

        g2d.setFont(new Font("Arial", Font.BOLD, 14));
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        g2d.setPaint(new LinearGradientPaint(0.0f, 0.0f, 0.0f, (float) getHeight(), new float[]{0.0f, 0.30f, 0.60f,
                0.9f}, new Color[]{new Color(0x63a5f7), new Color(0x3799f4), new Color(0x2d7eeb),
                new Color(0x30a5f9)}));
        g2d.fillRect(0, 0, getWidth(), getHeight());

        int width = getFontMetrics(getFont()).stringWidth(getText());
        int height = getFont().getSize();

        g2d.setColor(Color.YELLOW);
        g2d.drawString(getText(), (getWidth() / 2 - width / 2), (getHeight() / 2 + height / 2));
    }
}
```

@Guadrion:
Wenn das für alle Komponenten gelten soll, dann nutze doch einfach Deinen eigenen Button, anstatt jedesmal den JButton zu verwenden und die paintComponent-Methode zu überschreiben.

Edit:
Ich Dödel, hab ja doch die GradientPaint Klasse verwendet 

Gruß,
Xan


----------

