Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    883

    (java) ccome controllare il comportamento dei jtogglebutton

    codice:
    		JToggleButton searchJTB = new JToggleButton(SEARCH_LABEL);
    		searchJTB.setActionCommand(SEARCH_ACTION);
    		searchJTB.addActionListener(listener);
    
    		JToggleButton replaceJTB = new JToggleButton(REPLACE_LABEL);
    		replaceJTB.setActionCommand(REPLACE_ACTION);
    		replaceJTB.addActionListener(listener);
    
    		ButtonGroup group = new ButtonGroup();
    		group.add(searchJTB);
    		group.add(replaceJTB);
    Ho due jtoggle button "A" e "B" che appartengono ad uno stesso gruppo (nell'esempio di codice sono searchJTB e replaceJTB).
    Quando premo il bottone "A" si deseleziona il bottone "B" e viceversa
    Perfetto
    Quando premo "A" si seleziona "A", ma vorrei che quando ripremo "A", si deselezionasse, invece attualmente "A" mi rimane premuto

    Come faccio ad implementare questo comportamento?

  2. #2
    Crea un bottone aggiuntivo dummyButton, che non viene visualizzato. Quando premi A controlla se era gia' premuto. In quel caso, selezioni dummyButton.
    Spero di aver capito, e di averti fatto capire la mia idea... :rollo:
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    883
    altre soluzioni?

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Volendo puoi anche agire così. Aggiungi una variabile booleana per ciascun pulsante. In questo modo la controlli così:
    codice:
    // Nell'ActionListener
    public void actionPerformed(ActionEvent ae) {
       JToggleButton jtb = (JToggleButton) ae.getSource();
       if (jtb.equals( searchJTB )) {
          // Il primo pulsante
          if (variabileBooleana1) {
             // Il pulsante era già premuto: lo disattivi
             searchJTB.setSelected( false );
             variabileBooleana1 = false;
          } else {
             variabileBooleana1 = true;
             // ... faccio quello che devo fare
          }
       } else {
          // Il secondo pulsante
          if (variabileBooleana2) {
             // Il pulsante era già premuto: lo disattivi
             replaceJTB.setSelected( false );
             variabileBooleana2 = false;
          } else {
             variabileBooleana2 = true;
             // ... faccio quello che devo fare
          }
       }
    }
    E' solo un'idea... comunque ci sono altre possibilità.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    883
    invece della variabile booleana potrei usare il metodo della classe AbstractButton
    isSelected() ?

    LeleFT mi puoi accennare anche alle altre soluzioni?

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da abcd1000
    invece della variabile booleana potrei usare il metodo della classe AbstractButton
    isSelected() ?

    LeleFT mi puoi accennare anche alle altre soluzioni?
    Anch'io avevo pensato a isSelected() perè nel momento in cui viene scatenato l'evento ActionEvent, il pulsante è per forza selezionato... quindi il risultato sarà sempre true, anche nel caso della prima pressione.

    Altri modi prevederebbero l'utilizzo di un MouseListener su ciascun pulsante. Intercetti l'evento mousePressed() (che corrisponde alla pressione del tasto del mouse) e lì controlli se il pulsante è selezionato o meno (qui, se non erro, dovresti poter utilizzare il metodo isSelected() di AbstractButton).
    Un'altra soluzione te l'ha data dekdek e su quella linea di condotta puoi variare il tipo di oggetto.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.