# JToggleButton



## Guest (18. Feb 2008)

hey, wie kann ich feststellen ob ein solcher gerade "aktiv" ist, also eingedrückt, oder nicht?
und den dazugehörigen setter bräuchte ich auch.

mit isEnabled() scheinbar nicht, in der API hat der leider keine eigenen Methoden, sondern nur die 1200 geerbten.
Da weiss ich jetz nich nach was ich suchen soll, n gutes Beispiel hab ich auch nich gefunden..

Mein mouseListener muss ja wissen, was er ausführt, in abhängigkeit ob der button jetzt aktiviert wird oder deaktiviert.


----------



## martram (19. Feb 2008)

http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/AbstractButton.html#isSelected() ?
(setter: setSelected(boolean))


----------



## Guest (19. Feb 2008)

oh, entschuldige das hab ich nich gesehn..

hab nur nach "isActivated(), isEnabled(), isPressed()" usw gesucht, aber darna hab ich nicht gedacht 

aber wo wir grad bei Buttons sind:

so ein ToggleButton hat anscheinend keine Animation wenn man mit der Maus drüber fährt (ich meine dass die Umrahmung leicht markiert wird, so wie bei allen anderen buttons)
Mir gefällt das so besser, deshalb wollt ich mal fragne wie man bei nem normalen JButton diese ganzen Animationen dekativieren kann.

und ich hab ein kleines Problem mit einer JProgressBar (das war jetzt doch eine geniale überleitung und ausrede keinen neuen thread zu machen oder).

ich möchte da gerne die schriftfarbe ändern, die standard-mässig blau ist.

mit setForeground() ändert man nur die füllfarbe, und ich hab nix gefunden, auch nich bei google etc, wo man die schriftfarbe an sich ändern kann.
dieses babyblau passt halt gar nich in mein farbschma hinein 

achso und bei meinem polo is was mitm keilriemen nich in ordnung, könntet ihr da auch mal nachsehen?  :lol:


----------



## Guest (19. Feb 2008)

*edit:*

das is es wohl doch nicht! er is immer selected, dass sehe ich daran dass er immer in den einen zweig reingeht! selected heisst wohl nur, dass die maus gerade auf ihm ist. ist zwar komisch, aber naja...das is aber nich die toggleinformation:


```
JToggleButton pause;
pause = new JToggleButton("Pause");
pause.setBounds(20,30,70,25);
pause.addMouseListener(this);
pause.setSelected(false);

 if (!pause.isSelected()) {
                System.out.println("jetzt angewählt");
                pause.setSelected(true);

            } else {
                System.out.println("wieder deaktiviert...");
                pause.setSelected(false);
            }
```

es wird immer:

"wieder deaktiviert..." ausgegeben! sowohl am anfang als auch wenn ich 20 mal hintereinander drauf klick! er geht NIE in dien if-zweig oO


----------



## L-ectron-X (19. Feb 2008)

Für Buttons sollte nicht MouseListener  sondern ActionListener verwendet werden.


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

public class JToggleButtonTest extends JFrame {
   private JToggleButton button;
   
   public JToggleButtonTest(String title) {
      super(title);
      setLayout(new FlowLayout());
      setSize(300, 200);
      setLocationRelativeTo(null);
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      
      button = new JToggleButton("Klick mich!");
      button.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            System.out.println(getButtonIsSelected());
         }
      });
      
      add(button);
   }
   
   private boolean getButtonIsSelected() {
      return button.isSelected();
   }

   public static void main(String[] args) {
      new JToggleButtonTest("JToggleButtonTest").setVisible(true);
   }
}
```


----------



## Guest (19. Feb 2008)

hm, ja aber das löst ja nicht das problem, es ist das selbe.

das ding ist, dass ich statt isSelected() und setSelected() andere Methoden brauche, da 
zum Zeitpunkt des Klicks isSelected() IMMER true ist!
Aber so kann ich nicht herausfinden, ob der Button gerade aktiv ist oder nicht!
Es geht nicht:


```
public void actionPerformed(ActionEvent a) {

            if (!pause.isSelected()) {
                System.out.println("running = FALSE");
                Param.running = false;
                pause.setSelected(true);
                pause.setText("Unpause");
            } else {
                System.out.println("running...");
                Param.running = true;
                pause.setSelected(false);
            }
    }
```

Immer wenn ich auf den Button "pause" drück, kommt die Meldung "running", d.h. 
das setSelected(false) funktioniert irgendwie nicht, man kann so nicht rausfinden in welchem status sich
der Button befindet (Obwohl die API bei dieser MEthode eigentlich genau das behauptet)


_L-ectron-X hat diesen Beitrag am 20.02.2008 um 17:20 Uhr editiert._
_Code-Tags eingefügt._


----------



## L-ectron-X (20. Feb 2008)

Du darfst ja auch nicht den Status des Buttons per Code beinflussen.
Wäre folgendes in deinem Sinne?

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

public class JToggleButtonTest extends JFrame {
   private JToggleButton button;
   private JLabel label;
   
   public JToggleButtonTest(String title) {
      super(title);
      setSize(300, 200);
      setLocationRelativeTo(null);
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

      label = new JLabel("ready");
      add(label, BorderLayout.SOUTH);
      
      button = new JToggleButton("Start!");
      button.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent a) {
            if (!getButtonIsSelected()) {
                label.setText("paused");
                //Param.running = false;
                button.setText("Continue");
            } else {
                label.setText("running...");
                //Param.running = true;
                button.setText("Pause");
            }
         }
      });
      
      JPanel panel = new JPanel();
      panel.add(button);
      
      add(panel, BorderLayout.CENTER);
   }
   
   private boolean getButtonIsSelected() {
      return button.isSelected();
   }

   public static void main(String[] args) {
      new JToggleButtonTest("JToggleButtonTest").setVisible(true);
   }
}
```



			
				Anonymous hat gesagt.:
			
		

> wie man bei nem normalen JButton diese ganzen Animationen dekativieren kann.




```
button.setFocusPainted(false);
```



_L-ectron-X hat diesen Thread am 24.02.2008 um 10:53 Uhr gesperrt._
_Thread gesperrt, nach dem ein weiterer Thread mit ähnlichem Problem eröffnet wurde._
http://www.java-forum.org/de/viewtopic.php?t=64627


----------

