IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

JTextArea et JButton. Mettre le focus sur le bouton


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de Heavy Metal Hero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2007
    Messages : 152
    Billets dans le blog
    13
    Par défaut JTextArea et JButton. Mettre le focus sur le bouton
    Bonjour, le programme suivant affiche un JTextArea et un JButton "Close". J'ai définit le JButton comme default button car je voudrais qu'il ait le focus dés que j'ouvre la fenêtre. Or, quand je lance le programme, le bouton est bien en surbrillance mais le focus est sur le texfield. Comment faire ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    package test;
     
    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.awt.FlowLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;
    import javax.swing.ScrollPaneConstants;
    import javax.swing.border.EtchedBorder;
     
     
    public class Test {
     
        static JPanel southPanel;
        static JButton closeButton;
        static JFrame frame;
        static JTextArea textArea;
        private static final Dimension REASON_AREA_SIZE = new Dimension(250, 50);
     
        public static void main(String args[]) {
            String title = "";                                                                                                                                                                             
            frame = new JFrame();
            frame.setLayout(new BorderLayout());
            frame.setSize(1000, 800);
            textArea = new JTextArea();
            textArea.setLineWrap(true);
            textArea.setWrapStyleWord(true);
            textArea.setEditable(true);
            JScrollPane lScrollPane = new JScrollPane(textArea);
            lScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
            lScrollPane.setPreferredSize(REASON_AREA_SIZE);
            frame.add(lScrollPane, BorderLayout.CENTER);
            frame.add(createSouthPanel(), BorderLayout.SOUTH);
     
            //Here the close button is defined by default, the focus should be on it
            setDefaultButton();
     
            frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            frame.setTitle(title);                                                                                                                                                                          
            frame.setVisible(true);
        }
     
        private static JPanel createSouthPanel() {
            southPanel = new JPanel(
                    new FlowLayout(FlowLayout.RIGHT, 10, 10));
            southPanel.setBorder(new EtchedBorder(EtchedBorder.RAISED));
            addCloseButton(southPanel);
            return southPanel;
        }
     
        /**
         * Set the close button as default
         */
        protected static void setDefaultButton() {
            frame.getRootPane().setDefaultButton(closeButton);
        }
     
        private static void addCloseButton(JPanel pButtonsPanel) {
            closeButton = new JButton("Close");
            closeButton.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent pEvent) {
                    frame.dispose();
                }
            });
            pButtonsPanel.add(closeButton);
        }
    }
    Merci de votre aide

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 095
    Par défaut
    Essaye avec ceci, je ne sais pas si c'est la meilleur manière de faire mais ca fonctionne ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    frame.addWindowFocusListener(new WindowAdapter() {
                @Override
    			public void windowGainedFocus(WindowEvent e) {
                	closeButton.requestFocusInWindow();
                }
            });
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre éclairé
    Avatar de Heavy Metal Hero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2007
    Messages : 152
    Billets dans le blog
    13
    Par défaut
    Ca marche, le problème est que le focus se remettra sur le bouton close avec un simple minimize/restore, alors qu'il faudrait que le bouton ait le focus que quand l'on ouvre la fenêtre.
    En fait il est possible de mettre simplement closeButton.requestFocus() à la fin de la fonction main() et ça fonctionne !

    Merci !

  4. #4
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 095
    Par défaut
    En effet je n'avais pas pensé à ça. Il aurait mieux valu dans ce cas faire avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    frame.addWindowListener(new WindowListener() {
     
    					@Override
    					public void windowOpened(WindowEvent e)
    					{
    						closeButton.requestFocus();
     
    					}
    ...
    Mais effectivement si tu demande le focus une fois que la fenêtre est affichée (donc a la fin du main) ça marche.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/05/2006, 18h02
  2. MIPD 2.0 - Comment mettre le focus sur un element ?
    Par Xiao-An dans le forum Java ME
    Réponses: 4
    Dernier message: 15/12/2005, 01h55
  3. mettre le focus sur le champ approprié
    Par discogarden dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 06/07/2005, 16h59
  4. Réponses: 2
    Dernier message: 19/08/2003, 15h45
  5. Ne jamais mettre le focus sur un tbutton, possible
    Par portu dans le forum Composants VCL
    Réponses: 4
    Dernier message: 03/07/2003, 15h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo