Hintergrundfarbe von einem disabled Button ändern ?

Status
Nicht offen für weitere Antworten.

Cole

Bekanntes Mitglied
Hi,

Wenn ich einen Button mittels button.setEnabled(false) deaktiviere, möchte ich, dass er hinterher ne andere Farbe hat.
Wenn ich aber zB folgendes schreibe hat er immer noch dieses hässliche Grau:
Code:
      but = new JButton ( );
      but.setText ("<html><center>3</html>");

      but.setEnabled(false);
      but.setBackground(Color.RED);

Könnt ihr mir da helfen?
Ich meine ich habe hier mal nen Thread gesehen, der in die Richtung geht, aber konnte ihn nicht mehr finden...
 

foobar

Top Contributor
Am saubersten löst man das direkt über das LaF d.h. du änderst einfach die Disabledfarbe des Buttons auf das was du haben willst.

Ich habe es aber auch so ähnlich gelöst wie du indem ich die setEnabled-Methode überschrieben habe und dann nach super.setEnabled(state) wieder die Farbe korrekt gesetzt habe.
 

Cole

Bekanntes Mitglied
foobar hat gesagt.:
Am saubersten löst man das direkt über das LaF d.h. du änderst einfach die Disabledfarbe des Buttons auf das was du haben willst.

Ich habe es aber auch so ähnlich gelöst wie du indem ich die setEnabled-Methode überschrieben habe und dann nach super.setEnabled(state) wieder die Farbe korrekt gesetzt habe.

Und wie geht das? Und: Was ist LaF?
Verstehe grad nur Bahnhof.
 

foobar

Top Contributor
Look and Feel http://java.rrzn.uni-hannover.de/tkji/javakurs/swing/laf.html

Und wie geht das?
Ungefähr so:

Code:
btnSomething = new JButton ("Something")
{
   public void setEnabled(boolean state)
  {
     super.setEnabled(state);
     if (!state) setBackground(Color.RED);
  }
};

Falls das nicht funktioniert mußt du etwas basteln. Ich hatte das selbe Problem bei einer Combobox und das hat auch etwas gedauert bis es endlich gefunzt hat.
 

Cole

Bekanntes Mitglied
Hmm, das funktioniert irgendwie nicht.
Wenn ich die Methode einbauen will, bekomm ich folgenden Fehler:
Die Methode setEnabled(boolean) ist für den Typ Object nicht definiert (undefined).
Kannst du da mal kurz reinschauen? (Zeile 129-144)

Code:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.MouseAdapter;

import javax.swing.*;
import com.sun.org.apache.bcel.internal.generic.NEW;
import java.awt.CardLayout;



public class Beispiel
{

  JPanel glass = new JPanel();
  private JFrame jFrame = null;  //  @jve:decl-index=0:visual-constraint="102,65"
  private JPanel jContentPane = null;
  private JPanel jPanel = null;
  private JButton jButton2 = null;
  private JComponent jPanel1 = null;
  private JButton jButton = null;
  private JButton jButton3 = null;
  private JButton jButton4 = null;
  private JComponent jPanel3 = null;
  private JPanel jPanel2 = null;
  private JFrame getJFrame ( )

  {
    if (jFrame == null)
    {
      jFrame = new JFrame ( );
      jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      jFrame.setSize(new java.awt.Dimension(445,317));
      jFrame.setTitle("Hallo,Testbild");

      jFrame.setContentPane(getJContentPane());
      jFrame.setVisible(true);



    }
    return jFrame;
  }


  private JPanel getJContentPane ( )
  {
    if (jContentPane == null)
    {
      GridLayout gridLayout = new GridLayout();
      gridLayout.setRows(1);
      jContentPane = new JPanel ( );
      jContentPane.setLayout(gridLayout);
      jContentPane.add(getJPanel(), null);
    }
    return jContentPane;
  }


  private JPanel getJPanel ( )
  {
    if (jPanel == null)
    {

      jPanel = new JPanel ( );
      jPanel.setLayout(new BorderLayout());
      jPanel.add(getJPanel2(), java.awt.BorderLayout.WEST);
    }
    return jPanel;
  }


  private JButton getJButton2 ( )
  {
    if (jButton2 == null)
    {
      jButton2 = new JButton ( );

      jButton2.setText("Irgendwas");
      jButton2.setPreferredSize(new java.awt.Dimension(80,50));
      jButton2.setName("jButton2");  // Generated
      jButton2.setToolTipText("Hallo, ich bin ein Button");

      jButton2.addActionListener (new java.awt.event.ActionListener ( )
      {
        public void actionPerformed (java.awt.event.ActionEvent e)
        {
          Glassed glassed = new Glassed();
          glassed.getContent().setLayout( new GridLayout( 1, 1 ));

          JPanel glass = new JPanel();
          glass.setOpaque( false );
          glass.addMouseListener( new MouseAdapter(){} );
          glassed.setGlass( glass );



          glassed.getContent().add( jPanel3 );
//          jPanel3 = glassed;
        }
      });
    }
    return jButton2;
  }


  private JButton getJButton ( )
  {
    if (jButton == null)
    {
      jButton = new JButton ( );
      jButton.setText("Ende");
      jButton.setName("jButton");  // Generated
      jButton.addActionListener (new java.awt.event.ActionListener ( )
      {
        public void actionPerformed (java.awt.event.ActionEvent e)
        {
          System.exit(0);
        }
      });
    }
    return jButton;
  }


  private JButton getJButton3 ( )
  {
    if (jButton3 == null)
    {
      jButton3 = new JButton ( );
      jButton3.setText("Button");

    }
    return jButton3;

  }

  public void setEnabled(boolean state)
  {
     super.setEnabled(state);
     if (!state) jButton3.setBackground(Color.RED);
  }

  private JButton getJButton4 ( )
  {
    if (jButton4 == null)
    {
      jButton4 = new JButton ( );
      jButton4.setText("Nocheiner");
    }
    return jButton4;
  }


  private JComponent getJPanel1 ( )
  {
    if (jPanel1 == null)
    {

      jPanel1 = new JPanel ( );
      jPanel1.setLayout(new FlowLayout());
      jPanel1.add(getJButton2(), null);  // Generated
      jPanel1.add(getJButton(), getJButton().getName());  // Generate
      }


    return jPanel1;
  }
  /**
   * This method initializes jPanel3
   *
   * @return javax.swing.JPanel
   */
  private JComponent getJPanel3 ( )
  {
    if (jPanel3 == null)
    {
        jPanel3 = new JPanel ( );
        jPanel3.setLayout(new FlowLayout());

        jPanel3.add(getJButton3(), null);
        jPanel3.add(getJButton4(), null);

    }
    return jPanel3;
  }


  /**
   * This method initializes jPanel2
   *
   * @return javax.swing.JPanel
   */
  private JPanel getJPanel2 ( )
  {
    if (jPanel2 == null)
    {
      jPanel2 = new JPanel ( );
      jPanel2.setLayout(new BorderLayout());
      jPanel2.add(getJPanel1(), java.awt.BorderLayout.SOUTH);
      jPanel2.add(getJPanel3(), java.awt.BorderLayout.NORTH);
    }
    return jPanel2;
  }


  public static void main (String [ ] args)
  {

      Beispiel beispiel = new Beispiel();
      beispiel.getJFrame();






  }

}

class Glassed extends JLayeredPane{
    private JComponent glass;
    private JComponent content;

    public Glassed(){
        glass = new JPanel();
        glass.setOpaque( false );
        setLayer( glass, JLayeredPane.MODAL_LAYER.intValue() );
        add( glass );

        content = new JPanel();
        setLayer( content, JLayeredPane.DEFAULT_LAYER.intValue() );
        add( content );

        invalidate();
    }

    public JComponent getContent() {
        return content;
    }

    public void setGlass( JComponent glass ) {
        remove( this.glass );

        this.glass = glass;
        setLayer( glass, JLayeredPane.MODAL_LAYER.intValue() );
        add( glass );

        invalidate();
    }

    @Override
    public Dimension getPreferredSize() {
        return content.getPreferredSize();
    }

    @Override
    public Dimension getMinimumSize() {
        return content.getMinimumSize();
    }

    @Override
    public Dimension getMaximumSize() {
        return content.getMaximumSize();
    }

    @Override
    public void doLayout() {
        content.setBounds( 0, 0, getWidth(), getHeight() );
        glass.setBounds( 0, 0, getWidth(), getHeight() );
    }
}
 

foobar

Top Contributor
So habe ich das auch nicht implementiert. Du mußt die Methode im JButton überschreiben.

Code:
private JButton getJButton3 ( )
  {
    if (jButton3 == null)
    {
      jButton3 = new JButton ( )
      {
       public void setEnabled(boolean state)
       {
       super.setEnabled(state);
       if (!state) jButton3.setBackground(Color.RED);
     } 
     };
      jButton3.setText("Button");

    }
    return jButton3;

  }

P.S. Wenn du dich mit Swing noch nicht so gut auskennst, kann dir nur davon abraten einen GUI-Designer wie den VE zu verwenden. Sonst lernst du die Basics nie.
 

Cole

Bekanntes Mitglied
Danke dir, hatte das mit dem Überschreiben der bestehenden Methode nicht geschnallt. :/
Noch ne andere Frage:

Das müsste doch eigentlich mit allen Farben funktionieren oder?
Also wenn ich das schreib:
Code:
         super.setEnabled(state);
         if (!state) jButton.setBackground(Color.RED);

geht es einwandfrei, aber wenn ich schreibe:

Code:
         super.setEnabled(state);
         if (!state) jButton.setBackground(meineFarbe);

wird es trotzdem wieder grau. meineFarbe hohl ich mir einen Schritt vorher über

Code:
originalColor = jButton1.getBackground ( );

Achja, meineFarbe existiert, ist also nicht so, dass da beim getBackground was falsch läuft (hab ich getestet).

[Edit]: Hab nochmal was ausprobiert:
Ne neue Color erstellt mir nem beliebigen RGB Wert und den eingesetzt, das ging!
So wies aussieht liegt das Problem darin, dass originalColor = jButton1.getBackground ( ); (also der Standardfarbe der Buttons) noch "irgendwas" hat ausser den RGB Farben.

Gibts dafür irgendne Lösungsmöglichkeit?

[Edit2]: Liegt möglicherweise doch nicht an irgendeiner Zusatzstruktur, die auf dem Button liegt.
Habs mir mal ausgeben lassen, die Standardbuttons haben den RGB-Wert 238,238,238 .

Wäre super wenn da jemand ne Idee hat!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Swing JTable cellRenderer mit jpg Hintergrundfarbe lässt sich nicht ändern. AWT, Swing, JavaFX & SWT 1
E Hintergrundfarbe setzen in JPanel funktioneirt nicht AWT, Swing, JavaFX & SWT 4
E JavaFX SplitMenuButton Hintergrundfarbe AWT, Swing, JavaFX & SWT 1
E Swing Miserable Performance beim Ändern der Hintergrundfarbe von JLabels AWT, Swing, JavaFX & SWT 3
D Hintergrundfarbe AWT, Swing, JavaFX & SWT 6
C JavaFx TabelView - hintergrundfarbe möglich? AWT, Swing, JavaFX & SWT 1
S Swing Probleme mit transparenz der Hintergrundfarbe und JRadioButtons AWT, Swing, JavaFX & SWT 2
M JavaFX MenuItem Hintergrundfarbe in CSS AWT, Swing, JavaFX & SWT 4
A JButtons - es wird beim falschen Button die Hintergrundfarbe angepasst AWT, Swing, JavaFX & SWT 2
C Swing Hintergrundfarbe von Submenüeinträgen setzen AWT, Swing, JavaFX & SWT 2
M JComboBox Hintergrundfarbe des gewählten Items AWT, Swing, JavaFX & SWT 3
S Swing Hintergrundfarbe ändern AWT, Swing, JavaFX & SWT 9
R Swing Hintergrundfarbe der Zelle in einer JTable bei Markierung AWT, Swing, JavaFX & SWT 2
K Hintergrundfarbe des Frames ändern AWT, Swing, JavaFX & SWT 4
M Swing JTree: Wie kann ich die Hintergrundfarbe der selection ändern?!?! AWT, Swing, JavaFX & SWT 7
W Swing Hintergrundfarbe ändern AWT, Swing, JavaFX & SWT 4
S JTable Hintergrundfarbe AWT, Swing, JavaFX & SWT 5
M Hover-Farbe über Hintergrundfarbe legen AWT, Swing, JavaFX & SWT 3
B Hintergrundfarbe der JComboBox AWT, Swing, JavaFX & SWT 3
Shanks Hintergrundfarbe durch Button click ändern ?? AWT, Swing, JavaFX & SWT 6
A Hintergrundfarbe eines Applets ändern AWT, Swing, JavaFX & SWT 2
Psypsy Swing Jpanel Hintergrundfarbe ändern AWT, Swing, JavaFX & SWT 10
E Hintergrundfarbe wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
S Hintergrundfarbe in JToolbar nicht angezeigt AWT, Swing, JavaFX & SWT 2
P Swing Hintergrundfarbe auslesen und wieder setzen AWT, Swing, JavaFX & SWT 4
J Hintergrundfarbe von CheckBoxen in einer JTable AWT, Swing, JavaFX & SWT 4
E Swing JComboBox Hintergrundfarbe AWT, Swing, JavaFX & SWT 6
R Hintergrundfarbe vom Fenster AWT, Swing, JavaFX & SWT 2
M Hintergrundfarbe ändern AWT, Swing, JavaFX & SWT 5
M AWT Hintergrundfarbe zuweisen AWT, Swing, JavaFX & SWT 6
T einzelne Zelle einer JTable auswählen und Hintergrundfarbe ändern AWT, Swing, JavaFX & SWT 2
calzone JTable und Hintergrundfarbe AWT, Swing, JavaFX & SWT 12
G Hintergrundfarbe eines JPanels zurücksetzen AWT, Swing, JavaFX & SWT 12
G JToggleButton - Hintergrundfarbe beim Drücken festlegen AWT, Swing, JavaFX & SWT 4
S Hintergrundfarbe in einer Spalte der JTable verändern AWT, Swing, JavaFX & SWT 3
G JTextArea - Hintergrundfarbe? AWT, Swing, JavaFX & SWT 5
hdi Hintergrundfarbe von Label AWT, Swing, JavaFX & SWT 2
T Warum nehmen diese Labels die Hintergrundfarbe nicht an? AWT, Swing, JavaFX & SWT 6
D Browser -> Hintergrundfarbe AWT, Swing, JavaFX & SWT 11
T jtree Hintergrundfarbe für ganze Zeile AWT, Swing, JavaFX & SWT 2
S Hintergrundfarbe eines JFrames ändern AWT, Swing, JavaFX & SWT 2
R JTable Hintergrundfarbe ändern AWT, Swing, JavaFX & SWT 7
foobar Hintergrundfarbe eines JMenus ändern AWT, Swing, JavaFX & SWT 2
O Hintergrundfarbe beim ToolTip AWT, Swing, JavaFX & SWT 5
J [Newbie] Hintergrundfarbe ändern AWT, Swing, JavaFX & SWT 2
J JTabbedPane Hintergrundfarbe Problem AWT, Swing, JavaFX & SWT 8
S Hintergrundfarbe für JFrame AWT, Swing, JavaFX & SWT 6
I Hintergrundfarbe beim JLabel AWT, Swing, JavaFX & SWT 3
G JList: Hintergrundfarbe eines Eintrags AWT, Swing, JavaFX & SWT 5
M Seltsame Exception bei setVisible(true) Methode in einem JFrame AWT, Swing, JavaFX & SWT 2
MartinNeuerlich Kann mir jemand, der einen Mac mit einem m1 oder m2-Chip hat, eine POM geben mit der Javafx-Fullscreen beim Mac mit m-Chip funktioniert? AWT, Swing, JavaFX & SWT 1
W 2 JTables in einem Swing-Fenster? AWT, Swing, JavaFX & SWT 5
J JavaFx PDF in einem Element in einem Fenster anzeigen. AWT, Swing, JavaFX & SWT 11
Mojo7310 Ändern von Text in JLabel mit einem Button AWT, Swing, JavaFX & SWT 11
I JTable mit einem Button zu einer Detail Seite springen AWT, Swing, JavaFX & SWT 4
S Swing zu einem Datum Tage addieren/subtrahieren AWT, Swing, JavaFX & SWT 6
E Swing Mausposition auf einem JFrame erkennen AWT, Swing, JavaFX & SWT 5
Jose05 NullPointerException bei Beschreiben eines Labels aus einem Array AWT, Swing, JavaFX & SWT 12
ExceptionOfExpectation Textdarstellung auf einem Canvas mit Hilfe von repaint(); AWT, Swing, JavaFX & SWT 6
2 JavaFX die ChoiceBox leitet den String nicht weiter oder es komm zu einem NullPointer AWT, Swing, JavaFX & SWT 8
L JavaFX javafx.fxml.LoadException bei einem Taschenrechner AWT, Swing, JavaFX & SWT 5
Z GUI Forms - Mehrere Fenster in einem Projekt AWT, Swing, JavaFX & SWT 18
N Nur bei einem Textfiled Nullpointerexception bei getText() AWT, Swing, JavaFX & SWT 1
H JComobox in einem JPopupNeu AWT, Swing, JavaFX & SWT 7
P Button simpler random auf einem JPanel verteilen? AWT, Swing, JavaFX & SWT 3
W Inject bei einem Swing Frontend AWT, Swing, JavaFX & SWT 8
H Daten aus einer XML(x83-Datei) in einem JFrame anzeigen lassen AWT, Swing, JavaFX & SWT 9
Z Swing Drag and Drop mit einem JButton AWT, Swing, JavaFX & SWT 1
Z Mit einem Button einen anderen Button Triggern AWT, Swing, JavaFX & SWT 3
D AWT Wie kann ich ein Frame von einem anderen aus beeinflussen? AWT, Swing, JavaFX & SWT 7
T Setzen von der Schriftgröße bei einem Shell AWT, Swing, JavaFX & SWT 15
A checkbox in einer TableView abhängig von einem anderen Celleninhalt disablen AWT, Swing, JavaFX & SWT 1
J Fenster mit Inhalten aus einem Array Füllen AWT, Swing, JavaFX & SWT 4
D JavaFX Ein Parameter von einem Stage(GUI) zu einem anderen übergeben AWT, Swing, JavaFX & SWT 6
T Bilder bei einem JFrame einfügen AWT, Swing, JavaFX & SWT 4
S JavaFX Variablen in einem FXML File verwenden AWT, Swing, JavaFX & SWT 8
A Objekt von einem Window erstellen? AWT, Swing, JavaFX & SWT 8
Drachenbauer Swing Wie ändere ich die helle geklickt-Farbe von einem JButton? AWT, Swing, JavaFX & SWT 4
ralfb1105 JavaFX Alert Confirmation Dialog aus einem Service Thread AWT, Swing, JavaFX & SWT 8
F JavaFX Aktuelle Zeit in einem TextField anzeigen AWT, Swing, JavaFX & SWT 7
M JavaFX Bild zur ImageView in einem Kreis anzeigen. AWT, Swing, JavaFX & SWT 4
F JavaFX PNG aus einem resource Ordner laden AWT, Swing, JavaFX & SWT 8
F JavaFX Checken ob der Input einem festgelegten Format gleicht AWT, Swing, JavaFX & SWT 7
B JavaFX Bilder in einem Gewissen bereich halten AWT, Swing, JavaFX & SWT 1
cool_brivk24 BufferedImage einem ClickEvent hinzufügen AWT, Swing, JavaFX & SWT 13
Q-bert Doppelclick auf einem List item AWT, Swing, JavaFX & SWT 9
J JavaFX von einem Array aus Buttons herausfinden auf welcher geklickt wurde aus dem Array. AWT, Swing, JavaFX & SWT 1
C SWT autosize bei gc.drawString() auf einem Label AWT, Swing, JavaFX & SWT 7
R Farbe zu einem Eckpunkt generieren AWT, Swing, JavaFX & SWT 2
T Reihenfolge der Komponenten im einem JFrame AWT, Swing, JavaFX & SWT 8
F abgeleitete Panels von einem ContentPanel AWT, Swing, JavaFX & SWT 4
heinz ketchup While-Schleife in einem Service für GUI AWT, Swing, JavaFX & SWT 22
D zwei JLabel stapeln in einem JPanel AWT, Swing, JavaFX & SWT 5
H Hintergrundbild in einem Programm AWT, Swing, JavaFX & SWT 4
F RGB-Werte aus einem String einlesen AWT, Swing, JavaFX & SWT 26
stroggi Swing Mehrere transparentes Objekte (Grafiken) über einem Bild (JLabel) darstellen AWT, Swing, JavaFX & SWT 4
I JavaFX Fenster wird auf einem anderen Rechner anders dargestellt AWT, Swing, JavaFX & SWT 5
DaCrazyJavaExpert Swing Zwei gleichgroße Panels in einem Scrollpane mit Layout AWT, Swing, JavaFX & SWT 9
W Swing Hilfe beim Einbinden von Bildern in einem JFrame AWT, Swing, JavaFX & SWT 8
F AWT mehrere Panels in einem Frame AWT, Swing, JavaFX & SWT 17

Ähnliche Java Themen

Neue Themen


Oben