JButton [Résolu]

Ombitious_Developper 2333 Messages postés samedi 28 février 2004Date d'inscription 26 juillet 2013 Dernière intervention - 29 oct. 2006 à 11:31 - Dernière réponse : Ombitious_Developper 2333 Messages postés samedi 28 février 2004Date d'inscription 26 juillet 2013 Dernière intervention
- 30 oct. 2006 à 14:19
Salut:

Je développe actuellement une petite application qui utilise une sorte de grille pour afficher des lettres et des chiffres.

Pour assurer la persistance du dessin, (parceque je travaille hors la méthode paint de ma fenêtre) j'ai utilisé une grille de JButton vu :
1- Aspect 3D des JButtons.
2- persistance du dessin.

Mon problème est de rendre ces JButtons non opérables. Si je vais utiliser setEnabled (false) je vais perdre les couleurs de mes grilles qui deviennent gris.

Je veux bien que ces JButtons:
1- gardent leurs  couleurs.
2- Si on clique dessus ils ne s'enfoncent pas.
3- gardent leurs aspects 3D.

Est ce qu'il y a un moyen ou une méthode réalisant ça?
(

Si on clique sur un JButton il ne s'enfonce pas.


)
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 29 oct. 2006 à 16:14
3
Merci
Tout dépend de la bordure que tu lui applique pour le style 3D, mais oui, tu peux avoir un style 3D qui ne s'enfonce pas. Et puis en plus, tu peux lui appliquer une image pour faire ton propre style 3D si ca te chante...

Merci cs_DARKSIDIOUS 3

codes-sources a aidé 82 internautes ce mois-ci

Commenter la réponse de cs_DARKSIDIOUS
Meilleure réponse
Twinuts 5261 Messages postés dimanche 4 mai 2003Date d'inscription 20 avril 2018 Dernière intervention - 30 oct. 2006 à 12:53
3
Merci
Salut,

il faut utiliser ce qui suit:

lbl.setVerticalAlignment(SwingConstants.TOP);
lbl.setHorizontalAlignment(SwingConstants.RIGHT);

(ici je met le texte en haut a droite)

PS:tu t'es trompé de poste :P

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA

Merci Twinuts 3

codes-sources a aidé 82 internautes ce mois-ci

Commenter la réponse de Twinuts
Twinuts 5261 Messages postés dimanche 4 mai 2003Date d'inscription 20 avril 2018 Dernière intervention - 29 oct. 2006 à 11:57
0
Merci
Salut,

il te suffit simplement de redef le model graphique de ton bouton affin de preserver les couleurs et l'etat graphiqe(rollover, armed, etc...)
exemple

public class ButtonUI extends BasicButtonUI {

    public void paint(Graphics g, JComponent c) {
        AbstractButton b = (AbstractButton) c;
        ButtonModel model = b.getModel();
       
        String text = layout(b, SwingUtilities2.getFontMetrics(b, g), b
                .getWidth(), b.getHeight());

        g.setColor(Color.BLACK);
        g.fillRect(0, 0, b.getSize().width, b.getSize().height);
       
        clearTextShiftOffset();
        if (model.isArmed() && model.isPressed()) {
            paintButtonPressed(g, b);
        } else if(!model.isArmed() && !model.isPressed()){
            //le bouton n'est pas pressé et n'a pas la souris dessus
        }else if(!model.isArmed() && model.isPressed()){
            paintButtonPressedNotArmed(g, b);
        }

        // Paint the Icon
        if (b.getIcon() != null)
            paintIcon(g, c, iconRect);
        //paint the text
        if (text != null && !text.equals("")) {
            View v = (View) c.getClientProperty(BasicHTML.propertyKey);
            if (v != null)
                v.paint(g, textRect);
            else
                paintText(g, b, textRect, text);
        }

        if (b.isFocusPainted() && b.hasFocus()) {
            // paint UI specific focus
            paintFocus(g, b, viewRect, textRect, iconRect);
        }
    }
   
    protected void paintButtonPressedNotArmed(Graphics g, AbstractButton b) {
        //le bouton est pressé mais la souris n'est pas dessus

    }

    protected void paintButtonPressed(Graphics g, AbstractButton b) {
        //le bouton est pressé a toi de voir comment tu veux le dessiner
    }

    protected void paintIcon(Graphics g, JComponent c, Rectangle iconRect) {
        super.paintIcon(g, c, iconRect);
    }

    protected void paintText(Graphics g, JComponent c, Rectangle textRect,
            String text) {
        Graphics2D g2 = (Graphics2D) g;
        AbstractButton b = (AbstractButton) c;
        ButtonModel model = b.getModel();
        FontMetrics fm = SwingUtilities2.getFontMetrics(c, g2);
        int mnemonicIndex = b.getDisplayedMnemonicIndex();

        /* Draw the Text */
        if (model.isEnabled()) {
            /*** paint the text normally */
            g2.setColor(b.getForeground());
            SwingUtilities2.drawStringUnderlineCharAt(c, g2, text,
                    mnemonicIndex, textRect.x + getTextShiftOffset(),
                    textRect.y + fm.getAscent() + getTextShiftOffset());
        } else {
            /*** paint the text disabled ***/
            g2.setColor(b.getBackground().brighter());
            SwingUtilities2.drawStringUnderlineCharAt(c, g2, text,
                    mnemonicIndex, textRect.x, textRect.y + fm.getAscent());
            g2.setColor(b.getBackground().darker());
            SwingUtilities2.drawStringUnderlineCharAt(c, g2, text,
                    mnemonicIndex, textRect.x - 1, textRect.y + fm.getAscent()
                            - 1);
        }
    }

    protected void paintText(Graphics g, AbstractButton b, Rectangle textRect,
            String text) {
        paintText(g, (JComponent) b, textRect, text);
    }

    private String layout(AbstractButton b, FontMetrics fm, int width, int height) {
        Insets i = b.getInsets();
        viewRect.x = i.left;
        viewRect.y = i.top;
        viewRect.width = width - (i.right + viewRect.x);
        viewRect.height = height - (i.bottom + viewRect.y);
        textRect.x textRect.y textRect.width = textRect.height = 0;        iconRect.x iconRect.y iconRect.width = iconRect.height = 0;

        // layout the text and icon
        return SwingUtilities.layoutCompoundLabel(b, fm, b.getText(), b
                .getIcon(), b.getVerticalAlignment(), b
                .getHorizontalAlignment(), b.getVerticalTextPosition(), b
                .getHorizontalTextPosition(), viewRect, iconRect, textRect, b
                .getText() == null ? 0 : b.getIconTextGap());
    }

}

bref il te faut bidouiller à ta sauce mais tu devrais pouvoir t'en sortir avec.... point de vu utilisation c'est simple
JButton button = new JButton();
button.setUI(new ButtonUI());

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
Commenter la réponse de Twinuts
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 29 oct. 2006 à 13:03
0
Merci
C'est un peu bourrin d'utiliser des JButton pour faire des grilles !

J'aurais utiliser des JPanel avec une bordure plutôt !
Commenter la réponse de cs_DARKSIDIOUS
Ombitious_Developper 2333 Messages postés samedi 28 février 2004Date d'inscription 26 juillet 2013 Dernière intervention - 29 oct. 2006 à 15:48
0
Merci
Salut:

Est ce que les JPanel répondent à ce que je veux :

1. Forme 3D
2. si on clique dessus il ne s'enfonce pas.
Commenter la réponse de Ombitious_Developper
Ombitious_Developper 2333 Messages postés samedi 28 février 2004Date d'inscription 26 juillet 2013 Dernière intervention - 30 oct. 2006 à 12:43
0
Merci
Salut:

Juste une petite question.
Comment centré le texte dans un JLabel?

J'ai utilisé des espaces mais cette solution n'est pas générique.
Commenter la réponse de Ombitious_Developper
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 30 oct. 2006 à 12:50
0
Merci
il existe la fonction setHorizontalTextAlignement ou un truc de ce genre là.
Commenter la réponse de cs_DARKSIDIOUS
Ombitious_Developper 2333 Messages postés samedi 28 février 2004Date d'inscription 26 juillet 2013 Dernière intervention - 30 oct. 2006 à 14:12
0
Merci
Salut :

Merci ...
Commenter la réponse de Ombitious_Developper
Ombitious_Developper 2333 Messages postés samedi 28 février 2004Date d'inscription 26 juillet 2013 Dernière intervention - 30 oct. 2006 à 14:19
0
Merci
Salut:

Pour centrer le texte :

label.setVerticalAlignment (CENTER);
Commenter la réponse de Ombitious_Developper

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.