Gibt es Gradient-Button unter Swing?

Lautsprecher

Erfahrenes Mitglied
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
 
Hallo!

Was meinst du genau mit Gradient Button? Einen Farbverlauf als Hintergrund?
Code:
 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
 

Anhänge

  • GradientButton.jpg
    GradientButton.jpg
    3,1 KB · Aufrufe: 1.096
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
 
Hi nochmal,

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


Klasse 1:
Code:
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:

Code:
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);
	
	}
}
 
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
 
Hi,
geiler Code^^kann cih das automatisieren, dass das für alle SubComponents der Klasse, in der ich die Funktion überschreib gilt?
 
Moin,

hier mal ein Ergebnis von mir ohne die GradientPaint Klasse:

Java:
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 o_O

Gruß,
Xan
 
Zuletzt bearbeitet:
Zurück