Thorsten F.: JButton Icon ändern

Hi,

ich habe ein Problem mit dem Ändern von Icons in einem bestimmten JButton.

In einer Klasse A füge ich dem Panel 4 JButtons hinzu. Jeder JButton bekommt ein unterschiedliches Icon.
Wenn ich das Programm ausführe, dann sehe ich die 4 JButtons mit dem jeweilgen Icon. So weit, so gut.

Nun bin ich der Klasse B. Beim Programmstart kann ich auf einen Button klicken (Starte Thread). So, jetzt soll jede Sekunde ein bestimmtes JTextField ausgelesen werden und dieser Wert wird der Klasse A übergeben. Entweder ist dieser Wert true oder false.

Ich rufe jetzt in Klasse B eine Funktion in Klasse A und gebe dieser Funktion den Inhalt von dem JTextField mit.

Funktion in Klasse A:

public void setButtonA1(String wert)
 {
  System.out.println("Ich wurde aufgerufen mit dem Wert: " +wert);
  if(wert.equals("true"))
  {
   a1.setVisible(true);
   b1.setVisible(false);
  }
  else if(wert.equals("false"))
  {
   a1.setVisible(false);
   b1.setVisible(true);
  }
 }

Bei dem System.out.() erhalte ich auch den korrekten String, also entweder true oder false.
Aber seltsamer Weise interessiert es das Programm überhaupt nicht, was in der if-else-Anweisung steht.

Das Gleiche habe ich auch mit JLabels gemacht. Hier wird auch jede Sekunde ein anderer Text für ein bestimmtes JLabel generiert und diesen Text, also das aktualisierte JLabel sehe ich sofort.
Das habe ich in dem Thread so gemacht: JLabel.setText(string_vom_textfield);

Nun die Frage: Warum klappt das mit den JButtons nicht? Ich möchte, das nur ein Button angezeigt wird. Aber irgendwie funktioniert das setVisible() nicht.

Weiß jemand Rat?

Gruß,
Thorsten F.

  1. Hej,

    public void setButtonA1(String wert) {  
      System.out.println("Ich wurde aufgerufen mit dem Wert: " +wert);  
      if(wert.equals("true")) {  
        a1.setVisible(true);  
        b1.setVisible(false);  
      }  
      else if(wert.equals("false")) {  
        a1.setVisible(false);  
        b1.setVisible(true);  
      }  
    }
    

    Bei dem System.out.() erhalte ich auch den korrekten String, also entweder true oder false.
    Aber seltsamer Weise interessiert es das Programm überhaupt nicht, was in der if-else-Anweisung steht.

    Ich kann nur raten, aber was sagt ein a1.[link:http://java.sun.com/j2se/1.5.0/docs/api/java/awt/Component.html#isVisible()@title=isVisible()]? Was passiert nach einem explizitem [link:http://java.sun.com/j2se/1.5.0/docs/api/java/awt/Component.html#repaint()@title=repaint()]?

    Nun die Frage: Warum klappt das mit den JButtons nicht?

    Das kann ich dir leider nicht zuverlässig sagen, aber vielleicht interessieren dich noch ein paar Links:

    Lesson: Performing custom painting
    The JComponent Class
    Painting in AWT and Swing

    Beste Grüße
    Biesterfeld

    --
    Art.1: Et es wie et es
    Art.2: Et kütt wie et kütt
    Art.3: Et hätt noch immer jot jejange
    Das Kölsche Grundgesetz