JButton überschreiben

ForenDaddy

Aktives Mitglied
ich möchte meinem jbutton einen eigenen look geben.
nach der recherche per google und hier im forum sollte es mit dem überschreiben von jbutton eigentlich nicht so schwer sein.
Ziel: ein bestimmter button soll dauerhaft eine andere farbe bekommen, wenn ein bestimmter zustand erreicht wurde.
es tut sich jedoch einfach nichts.
wie gesagt, ich will nur die farbe ändern.
imageicons sind leider keine lösung.

habe auch schon mit uimanager experimentiert (kleine testzeile (17) in der main klasse).
damit kann ich die farbe ändern, aber eben nur global für alle buttons und auch nur für den moment, in dem er gedrückt wird (Button.select).
unter rgagnon.com ist mir allerdings nichts ins auge gefallen, das mir persönlich nützlich wäre.

look&feel hatte ich mir auch mal angesehen, aber nicht schlau draus geworden. zumindest in bezug auf mein problem.

nach 2 tagen geht mir langsam die luft aus und ich weiss nicht mehr, was ich noch testen soll oder kann.

Meine Button Klasse:
Java:
package fcp.GUI;
import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JButton;

public class FCPbutton extends JButton {

    public FCPbutton( String text) {
        super( text );
        setContentAreaFilled(false);
    }

    /** @override */
    public void paintComponent( Graphics g ) {
        super.paintComponent(g);
        g.setColor( Color.RED );
    }
}

Meine pseudo "Main"-Klasse damit man was sieht:
Java:
package fcp;
import java.awt.*;
import javax.swing.*;

public class JButtons extends JFrame {
  public static void main(String[] args) {
    new JButtons();
  }

  public JButtons() {
    super("My Button");
    Container content = getContentPane();
    content.setLayout(new FlowLayout());
    FCPbutton button1 = new FCPbutton("hallo");

    UIManager.put( "Button.select", Color.RED );
    
    content.add(button1);
    pack();
    setVisible(true);
  }
}
 

ForenDaddy

Aktives Mitglied
exakt. setbackground verändert die farbe hinter dem button.
ich möchte aber die farbe des buttons selber ändern.
normalerweise ist das ja dieses modisch schicke mausgrau.
bei mir soll es ein rot bzw. grün sein.

ich habe eigentlich gehofft dass das setcolor etwas daran ändern würde.

für mich ist halt wichtig, dass es kein bild ist, sondern dass der button immer frisch gerendert wird, weil die buttons ständig ihre größe und form ändern.
 
Zuletzt bearbeitet:

ForenDaddy

Aktives Mitglied
hab ich auch schon mal anders herum versucht.
selbe wirkung, nämlich leider keine.

witzigerweise hatte jemand in einem anderen forum, genau das bei einem so vorgeschlagen.
deshalb hab ich es so rum gelassen.

ich frag mal anders rum.
ist das was ich prinzipiell mache richtig?
woher weiss ich, was ich zu "tunen" habe, damit es gegebenenfalls so aussieht wie ich will?
 
Zuletzt bearbeitet:

ForenDaddy

Aktives Mitglied
hast recht. das ganze hier, ist eine testanwendung, in der ich die l&f aus dem original programm vergessen habe.
mit der l&f klappt das mit dem hintergrund nicht (siehe zeile 14).
aber auch mit hintergrund und ohne l&f, ist der button einfach nur rot, lässt aber die nette "3D" optik vermissen.

upgedatete main methode:
Java:
package fcp;
import java.awt.*;
import javax.swing.*;

public class JButtons extends JFrame {
  public static void main(String[] args) {
    new JButtons();
  }

  public JButtons() {
    super("Using Buttons");

    try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
	} catch(Exception e) {
            System.out.println("Error setting native LAF: " + e);
	}

    Container content = getContentPane();
    content.setLayout(new FlowLayout());
    FCPbutton button1 = new FCPbutton("hallo");
    button1.setText( "test" );
    button1.setBackground( Color.RED );
    //UIManager.put( "Button.select", Color.RED );
    
    content.add(button1);
    pack();
    setVisible(true);
  }
}
 

Michael...

Top Contributor
Wenn der 3D Effekt erhalten bleiben soll, fallen mir da spontan nur folgende Möglichkeiten ein:
1. Du schreibst eine eigene ButtonUI und weisst sie den betreffenden Buttons zu (könnte aufwendig werden)
2. Du machst die Buttons mit setContentAreaFilled(false) transparent und setzt sie auf ein JPanel auf dem Du den 3D Effekt selber malst.
3. Du schreibst Dir eine eigene Buttonklasse (z.B. auf Basis einer JComponent mit MouseListener)

Wobei mir jetzt beim Schreiben Variante 3 besser gefällt als Variante 2
 

ForenDaddy

Aktives Mitglied
die variante 3 ist, so oder so ähnlich, das was ich eigentlich bezweckte.
ich dachte nur, es reicht den jbutton zu nehmen und lediglich eine komponente zu verändern, die farbe.

puh, ok.
mal gegenfrage, woher weisst du jetzt, dass du eine jcomponent nehmen musst und keinen jbutton?
 

Michael...

Top Contributor
Kommt auf den Einsatzzweck und die Verwendungsart an.
In dem Fall würde ich auf Basis einer JComponent und MouseListener den Button selbst zusammenbauen, da man mit den Methoden des MouseListeners ja das Verhalten ausreichend nachstellen kann.
Denke das ist einfacher als an JButton, LaF rumzuschrauben oder mittels AbstractButton was eigenes zu definieren.

So ein Objekt kann dann allerdings nicht als "Button" verbaut/verwendet werden und wenn man diesem auch noch einen ActionListener zuweisen wollte, müsste man das auch noch implementieren.
 

ForenDaddy

Aktives Mitglied
ich bin jetzt gerade schwer am überlegen, ob ich den farbigen button wirklich wirklich brauche :D
hört sich alles kompliziert und für den kleinen effekt nach sehr viel arbeit an.

hat das eigentlich noch nie jemand selbst gemacht?
ich bin über google zumindest noch nie über einen brauchbaren beispielcode gestolpert.
vielleicht auch nach den falschen begriffen gesucht, wer weiss.
 

ForenDaddy

Aktives Mitglied
die einflussmöglichkeiten sind leider sehr sehr begrenzt.
was somit schnell viel arbeit nach sicht zieht. selbst für einfache dinge.
und farbe ist wohl keine kernphysik.
 

ForenDaddy

Aktives Mitglied
kann man eigentlich ein imageicon verwenden und die schrift wie beim normalen jbutton darüber projezieren? momentan wird jeder jbutton bei mir mit dem imageicon überlagert. settext sachen sind somit nicht sichtbar. so könnte ich mir meine eigenen buttons basteln, den text aber zur laufzeit immer wieder bequem verändern. und ich könnte den button einfach skalieren lassen, die schrift würde aber trotzdem immer korrekt aussehen.


in wie weit ist L&F eine philosophische frage?
wenn die software unter einem windows system laufen soll, ist es einfach nur praktisch für den benutzer, wenn es auch nach windows aussieht.
das fördert die akzeptanz und einfache benutzung, weil die erwartungshaltung erfüllt wird.

abgesehen davon sind die original java buttons nicht wirklich schön, um es höflich auszudrücken.
sie haben leider keinen wow effekt, weil sie sooo total neu und stylisch aussehen.
und habe leider auch keinen nostalgie faktor, wie z.b. zu 8bit zeiten.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Swing JButton paintComponent überschreiben AWT, Swing, JavaFX & SWT 5
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
N JButton über benutzerdefinierte paintComponent setzen AWT, Swing, JavaFX & SWT 3
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


Oben