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 :

Position de l'ajout d'un bouton


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur
    Avatar de thierryler
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 078
    Par défaut Position de l'ajout d'un bouton
    Bonjour à tous,

    J'ai ajouté un bouton dans un JFrame :

    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
     
    public class ChienJFrame5 extends JFrame {
     
    	/**
             * serialVersionUID
             */
    	private static final long serialVersionUID = -638731145561555723L;
     
    	private static final Logger LOGGER = Logger.getLogger(ChienJFrame5.class);
     
    	public ChienJFrame5() {
    		super();
    		setTitle("Liste des chiens (v5)");
    		setPreferredSize(new Dimension(500, 400));
    		setDefaultCloseOperation(EXIT_ON_CLOSE);
     
    		final JPanel boutons = new JPanel();
    		boutons.add(new JButton(new AjouterLigneAction()));
    		getContentPane().add(boutons, SOUTH);
     
    		final JTable tableau = new JTable(new ModeleDynamique2());
    		getContentPane().add(tableau.getTableHeader(), NORTH);
    		getContentPane().add(new JScrollPane(tableau), CENTER);
     
    		tableau.setDefaultRenderer(Sexe.class, new SexeCellRenderer());
    		tableau.setDefaultRenderer(RaceDeChien.class, new RaceCellRenderer());
     
    		tableau.getColumnModel().getColumn(4).setCellRenderer(new ListeCouleursCellRenderer());
     
    		tableau.setAutoCreateRowSorter(true);
     
    		final TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(tableau.getModel());
    		tableau.setRowSorter(sorter);
     
    		sorter.setSortable(0, false); // colonne Nom non triable
    		sorter.setComparator(1, new StringSizeComparator()); // Tri sur le nb de
    																// lettres
     
     
     
    		pack();
    	}
     
    	private class AjouterLigneAction extends AbstractAction {
     
    		/**
                     * serialVersionUID
                     */
    		private static final long serialVersionUID = 7183768497443802311L;
     
    		private AjouterLigneAction() {
    			super("Ajouter");
    			System.out.println("bouton");
    		}
     
    		@Override
    		public void actionPerformed(ActionEvent e) {
    			//LOGGER.debug("Click sur le bouton ajouter");
    			System.out.println("lala");
    		}
    	}
     
    }
    Ca fonctionne très bien. Par contre, quand je déplace l'ajout du bouton, il n'est plus cliquable et je ne comprend pas...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    		getContentPane().add(tableau.getTableHeader(), NORTH);
    		getContentPane().add(new JScrollPane(tableau), CENTER);
    		getContentPane().add(boutons, SOUTH);  // deplacée
    Quelqu'un a une idée ?

    Thierry
    Thierry Leriche-Dessirier
    Consultant Java JEE Web Agile freelance
    Rédacteur pour Developpez
    Professeur de Génie Logiciel à l'ESIEA

    Site : http://www.icauda.com / Linked'in : http://www.linkedin.com/in/thierryler / Twitter : @ThierryLeriche

  2. #2
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    ben déjà, avec la classe que tu as postée ci-dessus, je vois pas comment le code suivant peut fonctionner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getContentPane().add(boutons,  SOUTH);
    sinon, il faudrait tout poster, pour qu'on puisse essayer...
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  3. #3
    Rédacteur
    Avatar de thierryler
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 078
    Par défaut
    Je précise, c'est quand je fais ça que ça ne marche plus :

    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
     
    public ChienJFrame5() {
    		super();
    		setTitle("Liste des chiens (v5)");
    		setPreferredSize(new Dimension(500, 400));
    		setDefaultCloseOperation(EXIT_ON_CLOSE);
     
    		final JPanel boutons = new JPanel();
    		boutons.add(new JButton(new AjouterLigneAction()));
    		getContentPane().add(boutons, SOUTH);
     
    		final JTable tableau = new JTable(new ModeleDynamique2());
    		getContentPane().add(tableau.getTableHeader(), NORTH);
    		getContentPane().add(new JScrollPane(tableau), CENTER);
    		getContentPane().add(boutons, SOUTH);
     
    		...
    Je déplace juste la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    		getContentPane().add(boutons, SOUTH);
    J'ai mis un zip en pièce jointe. Ca se passe dans ChienJFrame5. Attention l'IHM utilise ChienJFrame6 et non ChienJFrame5, donc il faut décommenter pour tester.
    Fichiers attachés Fichiers attachés
    Thierry Leriche-Dessirier
    Consultant Java JEE Web Agile freelance
    Rédacteur pour Developpez
    Professeur de Génie Logiciel à l'ESIEA

    Site : http://www.icauda.com / Linked'in : http://www.linkedin.com/in/thierryler / Twitter : @ThierryLeriche

  4. #4
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    Pourquoi tu l'ajoutes 2 fois ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public ChienJFrame5() {
    		super();
    		setTitle("Liste des chiens (v5)");
    		setPreferredSize(new Dimension(500, 400));
    		setDefaultCloseOperation(EXIT_ON_CLOSE);
     
    		final JPanel boutons = new JPanel();
    		boutons.add(new JButton(new AjouterLigneAction()));
    		getContentPane().add(boutons, SOUTH);
     
    		final JTable tableau = new JTable(new ModeleDynamique2());
    		getContentPane().add(tableau.getTableHeader(), NORTH);
    		getContentPane().add(new JScrollPane(tableau), CENTER);
    		getContentPane().add(boutons, SOUTH);
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  5. #5
    Rédacteur
    Avatar de thierryler
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 078
    Par défaut
    une seule fois. Mauvais copié collé sur le forum
    Thierry Leriche-Dessirier
    Consultant Java JEE Web Agile freelance
    Rédacteur pour Developpez
    Professeur de Génie Logiciel à l'ESIEA

    Site : http://www.icauda.com / Linked'in : http://www.linkedin.com/in/thierryler / Twitter : @ThierryLeriche

  6. #6
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    Bon j'ai trouvé où ça cloche.
    Le bouton n'y est pour rien.

    tu as écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    		getContentPane().add(tableau.getTableHeader(), NORTH);
    		getContentPane().add(new JScrollPane(tableau), CENTER);
    		getContentPane().add(boutons, SOUTH);
    et ça plante avec un paquet d'erreurs qui ont l'air d'être récursives :
    Exception in thread "main" java.lang.NullPointerException
    at java.awt.Container.addNotify(Container.java:2592)
    at javax.swing.JComponent.addNotify(JComponent.java:4683)
    at java.awt.Container.addNotify(Container.java:2592)
    at javax.swing.JComponent.addNotify(JComponent.java:4683)
    at java.awt.Container.addNotify(Container.java:2592)
    at javax.swing.JComponent.addNotify(JComponent.java:4683)
    at javax.swing.JRootPane.addNotify(JRootPane.java:735)
    at java.awt.Container.addNotify(Container.java:2592)
    at java.awt.Window.addNotify(Window.java:635)
    at java.awt.Frame.addNotify(Frame.java:469)
    at java.awt.Window.pack(Window.java:663)
    at chien.ChienJFrame5.<init>(ChienJFrame5.java:40)
    par contre si on ajoute le JScrollPane en dernier, ça marche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    		getContentPane().add(tableau.getTableHeader(), NORTH);
    		getContentPane().add(boutons, SOUTH);
    		getContentPane().add(new JScrollPane(tableau), CENTER);
    j'ai tenté de contourner en n'ajoutant le tableau qu'après :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            JScrollPane scroll = new JScrollPane();
            getContentPane().add(tableau.getTableHeader(), NORTH);
            getContentPane().add(scroll, CENTER); 
            getContentPane().add(boutons, SOUTH);     // jusque-là, ça marche
     
            scroll.setViewportView(tableau);     // là, ça marche plus
    conclusion : ça ne vient pas du bouton mais du JScrollPane(tableau) qui doit être ajouté en dernier.
    pourquoi ? je suppose que Swing doit placer une tâche quelque part dans l'EDT et qu'elle tourne en rond avec les autres ajouts.
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

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

Discussions similaires

  1. Ajouter dynamiquement un bouton
    Par toure32 dans le forum Delphi
    Réponses: 2
    Dernier message: 16/04/2007, 23h40
  2. [JTable] ajout d'un bouton dans une colonne
    Par Blast dans le forum Composants
    Réponses: 7
    Dernier message: 15/03/2007, 17h33
  3. Réponses: 11
    Dernier message: 28/01/2006, 20h52
  4. [Débutant] [Applet] ajout d'un bouton
    Par Seth77 dans le forum Applets
    Réponses: 6
    Dernier message: 05/12/2005, 13h23

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