Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

checkbox en affichage

3 réponses
Avatar
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

3 réponses

Avatar
Christian Laborde
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
Avatar
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.
Avatar
Xavier Tarrago
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" a écrit dans le message de news:

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.