checkbox en affichage

Le
Xavier Tarrago
Bonjour,

J'ai un petit problème bête:

Dans une appli Swing, je voudrais afficher un valeur booleenne que
l'utilisateur ne peut pas changer, juste pour info.

La seule façon que j'ai trouvée est de désactiver le JCheckBox, mais il
est grisé, ce qui semble indiquer que l'information n'est pas disponible. En
fait, je voudrais qu'il apparaîsse comme un checkBox normal, mais qu'il ne
puisse pas être changé par l'utilisateur (ni à la souris ni au clavier).

Voilà, si vous avez des idées, je suis preneur.

Xavier
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Christian Laborde
Le #19486351
setFocusable(false) peut-être ?

Xavier Tarrago a écrit :
Bonjour,

J'ai un petit problème bête:

Dans une appli Swing, je voudrais afficher un valeur booleenne que
l'utilisateur ne peut pas changer, juste pour info.

La seule façon que j'ai trouvée est de désactiver le JCheckBox, mais il
est grisé, ce qui semble indiquer que l'information n'est pas disponible. En
fait, je voudrais qu'il apparaîsse comme un checkBox normal, mais qu'il ne
puisse pas être changé par l'utilisateur (ni à la souris ni au clavier...).

Voilà, si vous avez des idées, je suis preneur.

Xavier





--
Christian Laborde
La Révolution citoyenne, c'est sur : http://c.lab.over-blog.com/
Le forum des électrons libres :
http://electrons-libres.forumactif.fr
Les citoyens qui voient Net : http://www.netoyens.info
True E-mail : remove -no-spam-
Sentier des Vinches
CH 1091 Grandvaux
Suisse
Parabellum
Le #19487001
Il suffit de créer un modèle pour la checkbox qui n'accepte pas les
modifications.
Voici une implémentation rapide qui devrait faire l'affaire :

________________________________________________________________________
import javax.swing.JToggleButton;
import javax.swing.JToggleButton.ToggleButtonModel;

public class FixedToggleButtonModel
extends ToggleButtonModel
{
public FixedToggleButtonModel( boolean selected )
{
super.stateMask &= ~( SELECTED | ARMED | PRESSED | ROLLOVER );
if (selected) {
super.stateMask |= SELECTED;
}
}

@Override public void setArmed ( boolean unused ) { /* ignore
*/ }
@Override public void setPressed ( boolean unused ) { /* ignore
*/ }
@Override public void setRollover( boolean unused ) { /* ignore
*/ }
@Override public void setSelected( boolean unused ) { /* ignore
*/ }

public final static void makeFixedButton( JToggleButton button )
{
makeFixedButton( button, button.isSelected());
}

public final static void makeFixedButton( JToggleButton button,
boolean selected)
{
button.setModel( new FixedToggleButtonModel( selected));
button.setFocusable( false);
}
}

________________________________________________________________________
Pour utiliser ce modèle, vous pouvez écrire :

JCheckBox cb = new JCheckBox( "Read only", enabled );
FixedToggleButtonModel.makeFixedButton( cb );

Ou bien :

JCheckBox cb = new JCheckBox( "Read only" );
FixedToggleButtonModel.makeFixedButton( cb, enabled );


Franck.
Xavier Tarrago
Le #19491351
Ca le fait.

Pour répondre a Christian Laborde, setFocusable(false) ne marche pas. Le
checkbox ne recoit pas le focus mais on peut quand même le cocher.

La solution proposée ici ne permet plus de changer l'état du toggle apres sa
création par le code. Je veux informer l'utilisateur d'une condition qui
change au cours du temps, mais qu'il ne peut pas choisir. Une methode du
style

void internalSetSelected(boolean newState) {
super.setSelected(newState);
}

permet de faire cela.

Merci beaucoup,

Xavier

"Parabellum"
Il suffit de créer un modèle pour la checkbox qui n'accepte pas les
modifications.
Voici une implémentation rapide qui devrait faire l'affaire :

________________________________________________________________________
import javax.swing.JToggleButton;
import javax.swing.JToggleButton.ToggleButtonModel;

public class FixedToggleButtonModel
extends ToggleButtonModel
{
public FixedToggleButtonModel( boolean selected )
{
super.stateMask &= ~( SELECTED | ARMED | PRESSED | ROLLOVER );
if (selected) {
super.stateMask |= SELECTED;
}
}

@Override public void setArmed ( boolean unused ) { /* ignore
*/ }
@Override public void setPressed ( boolean unused ) { /* ignore
*/ }
@Override public void setRollover( boolean unused ) { /* ignore
*/ }
@Override public void setSelected( boolean unused ) { /* ignore
*/ }

public final static void makeFixedButton( JToggleButton button )
{
makeFixedButton( button, button.isSelected());
}

public final static void makeFixedButton( JToggleButton button,
boolean selected)
{
button.setModel( new FixedToggleButtonModel( selected));
button.setFocusable( false);
}
}

________________________________________________________________________
Pour utiliser ce modèle, vous pouvez écrire :

JCheckBox cb = new JCheckBox( "Read only", enabled );
FixedToggleButtonModel.makeFixedButton( cb );

Ou bien :

JCheckBox cb = new JCheckBox( "Read only" );
FixedToggleButtonModel.makeFixedButton( cb, enabled );


Franck.
Publicité
Poster une réponse
Anonyme