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 :

Changer de panel quand on clique sur un bouton


Sujet :

AWT/Swing Java

  1. #1
    Membre actif
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Points : 270
    Points
    270
    Par défaut Changer de panel quand on clique sur un bouton
    Bonjour,

    Dans l'interface de mon appli, j'affiche 4 panels (1 au nord, 1 à l'ouest, 1 au centre et 1 au sud).

    Dans le panel de l'ouest, j'ai différents boutons. J'aimerais que quand je clique sur un des boutons, le panel du centre change.

    J'utilise en fait des SimpleInternalFrame de la librairies JGoodies.

    Dans la métohde actionPerformed, j'appelle repaint() et j'ai redéfini la méthode paint() pour qu'elle appelle ma méthode qui construit le panel.

    Voici le code de ma classe:

    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
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    public class GUIManager extends JFrame implements ActionListener {
     
    	private static final long serialVersionUID = 1L;
     
    	public static final int MEMBRES = 1;
    	public static final int FAMILLES  = 2;
     
    	private int currentList = MEMBRES;
     
    	// Composants
    	private SimpleInternalFrame m_selectionsFrame;
    	private SimpleInternalFrame m_membresFrame;
    	private SimpleInternalFrame m_famillesFrame;
     
    	private JPanel m_barreEtat;
     
    	private JButton m_membresButton;
    	private JButton m_famillesButton;
     
    	private Box m_selectionsBox;
     
    	private JMenuBar m_barreMenu;
    	// Menu Fichier
    	private JMenu m_fichier;
    	private JMenuItem m_file_quitter;
    	// Menu Edition
    	private JMenu m_edition;
    	// Menu Affichage
    	private JMenu m_affichage;
    	private JMenuItem m_aff_membres;
    	private JMenuItem m_aff_familles;
     
    	/**
             * Constructeur
             */
    	public GUIManager() {
    		// La frame
    		this.setContentPane(build());
    		GUIUtils.locateOnScreenCenter(this);
    		// La barre de menu
    		this.setJMenuBar(buildMenuBar());
    		this.setSize(new Dimension(800, 550));
    		this.setResizable(false);
    		this.setTitle("Manager");
    		this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
    		this.addWindowListener(new WindowAdapter() {
    			@Override
    			public void windowClosing(WindowEvent evt) {
    				quit();
    			}
    		});
    	}
     
    	@Override
    	public void paint(Graphics g) {
    		// TODO Auto-generated method stub
    		super.paint(g);
    		build();
    	}
     
    	/**
             * Construit la frame
             * @return panel Le panel des sélections
             */
    	private Container build() {
     
    		m_selectionsFrame = new SimpleInternalFrame("Options");
    		buildSelectionsFrame();
     
    		m_membresFrame = new SimpleInternalFrame("Membres");
    		buildMembresFrame();
     
    		m_famillesFrame = new SimpleInternalFrame("Familles");
    		buildFamillesFrame();
     
    		m_barreEtat = new JPanel();
    		buildBarreEtat();
     
     
     
            CellConstraints cc = new CellConstraints();
            FormLayout layout = new FormLayout("fill:60dlu, 5dlu, fill:1dlu:grow", "30dlu, fill:50dlu:grow, 20dlu");
            DefaultFormBuilder builder = new DefaultFormBuilder(layout);
    //        builder.setDefaultDialogBorder();
            builder.add(createToolBar(), cc.xyw(1, 1, 3));
            builder.add(m_selectionsFrame, cc.xy(1, 2));
            if (currentList == FAMILLES) {
            	builder.add(m_famillesFrame, cc.xy(3, 2));
            } else if (currentList == MEMBRES) {
            	builder.add(m_membresFrame, cc.xy(3, 2));
            }
            builder.add(m_barreEtat, cc.xyw(1, 3, 3));
     
            return builder.getPanel();
     
     
    	}
     
    	private JComponent createToolBar() {
    		FormLayout layout = new FormLayout("p, 5, p, 5dlu, p, ", "p");
    		PanelBuilder builder = new PanelBuilder(layout);
    		builder.setDefaultDialogBorder();
    		builder.setBackground(Color.WHITE);
    		JButton but1 = new JButton("1");
    		JButton but2 = new JButton("2");
    		JButton but3 = new JButton("3");
    		CellConstraints cc = new CellConstraints();
    		builder.add(but1, cc.xy(1, 1));
    		builder.add(but2, cc.xy(3, 1));
    		builder.add(but3, cc.xy(5, 1));
     
    		return builder.getPanel();
    	}
     
    	/**
             * Construit la barre de menu principale
             * @return m_barreMenu La barre de menu
             */
    	private JMenuBar buildMenuBar() {
    		m_barreMenu = new JMenuBar();
    		// Menu Fichier
    		m_fichier = new JMenu("Fichier");
    		m_file_quitter = new JMenuItem("Quitter");
    		m_file_quitter.addActionListener(this);
    		// Menu Edition
    		m_edition = new JMenu("Edition");
    		// Menu Affichage
    		m_affichage = new JMenu("Affichage");
    		m_aff_membres = new JMenuItem("Membres");
    		m_aff_membres.addActionListener(this);
    		m_aff_familles = new JMenuItem("Familles");
    		m_aff_familles.addActionListener(this);
     
    		m_fichier.add(m_file_quitter);
    		m_affichage.add(m_aff_membres);
    		m_affichage.add(m_aff_familles);
     
    		m_barreMenu.add(m_fichier);
    		m_barreMenu.add(m_edition);
    		m_barreMenu.add(m_affichage);
     
    		return m_barreMenu;
    	}
     
    	/**
             * Construit la frame des sélections
             */
    	private void buildSelectionsFrame() {		
    		// Boutons
    		m_membresButton = new JButton("Membres");
    		m_membresButton.addActionListener(this);
    		m_famillesButton = new JButton("Familles");
    		m_famillesButton.addActionListener(this);
    		// Box
    		m_selectionsBox = Box.createVerticalBox();
    		m_selectionsBox.setOpaque(false);
    		m_selectionsBox.add(m_membresButton);
    		m_selectionsBox.add(m_famillesButton);
     
    		// ScrollPane
    		JScrollPane selections = new JScrollPane(m_selectionsBox);
    		selections.setOpaque(false);
    		selections.getViewport().setOpaque(false);
    		selections.setViewportBorder(null);
     
    		m_selectionsFrame.setContent(selections);
    	}
     
    	/**
             * Construit la frame des membres
             */
    	private void buildMembresFrame() {
    		...
    	}
     
    	/**
             * Construit la frame des familles
             */
    	private void buildFamillesFrame() {
    		...
    	}
     
    	/**
             * Consrtuit la barre d'états
             */
    	private void buildBarreEtat() {
    		m_barreEtat.setBackground(Color.WHITE);
     
    		m_barreEtat.add(new JLabel("Exécution en cours"));
    	}
     
    	/**
             * Permet de quitter l'application
             * @return Si la fenêtre doit être fermée ou pas
             */
    	private boolean quit() {
    		return true;
    	}
     
    	/* (non-Javadoc)
    	 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
    	 */
    	public void actionPerformed(ActionEvent e) {
    		if (e.getSource() == m_file_quitter) {
    			quit();
    		} else if (e.getSource() == m_membresButton) {
    			currentList = MEMBRES;
    			repaint();
    		} else if (e.getSource() == m_famillesButton) {
    			currentList = FAMILLES;
    			repaint();
     
    		}
    	}
    Comment dois-je faire pour que la fenetre soit réaffichée.

    Merci d'avance

  2. #2
    Membre actif
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Points : 270
    Points
    270
    Par défaut
    Si personne ne sait, quelle technique pourrais-je utiliser pour que en fonction du bouton qui est pressé, ce qui est affiché dans la fenetre change ?

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 705
    Points : 393
    Points
    393
    Par défaut
    Je comprends pas trop ce que tu veux faire; ouvrir des internals frames
    dans le panel en BorderLayout.CENTRE ??

    primo tu devrais peut etre laisser tomber JGoodies et commencer par les InternalFrames de swing pour commencer. Et suivre le tutorial.

    deuxio relire tout ton code c'est un peu long.

    Pense au relalidate, et aux repaints, et au bonne objet sur lequel ca doit s'appliquer.

  4. #4
    Membre actif
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Points : 270
    Points
    270
    Par défaut
    oui c'est ça.

    Soit je garde la meme internal frame et j'utilise setContentPane() ou je change de frame.

    Il faudra que je regarde, mais en effet, je ne dois pas l'appliquer au bon composant...

  5. #5
    Expert éminent
    Avatar de Sepia
    Homme Profil pro
    Administrateur du cursus IDE@L - Chef de Projet NCU (digital learning) - Université de Rennes
    Inscrit en
    Octobre 2007
    Messages
    3 117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur du cursus IDE@L - Chef de Projet NCU (digital learning) - Université de Rennes
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 3 117
    Points : 6 856
    Points
    6 856
    Par défaut Affichage/Masquage d'un composant
    Salut,

    Si tu as 4 panels (Center, north...), c'est que tu utilises un BorderLayout. Pour mettre à jour le composant sur un clic d'un bouton, il suffit de mettre un listerner sur ton bouton, de modifier ton panel du centre (que tu auras auparavant mis dans une donnée membre de ta classe qui insère le bouton, en général c'est la classe qui construit les 4 panels de départ), d'affecter le nouveau panel à ta variable puis d'appeler revalidate(); repaint(); sur ton panel.

  6. #6
    Membre actif
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Points : 270
    Points
    270
    Par défaut
    J'ai trouvé, je faisais bien ce que tu as dis, le problème était que le listener sur le bouton n'était pas capté dans ActionPerformed(), je ne sais pas pourquoi, mais j'ai fais une petite modeif et ça marche.

    Merci

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 09/02/2013, 23h05
  2. changer une image quand on clique sur un lien
    Par arckaniann dans le forum Mise en page CSS
    Réponses: 19
    Dernier message: 01/06/2012, 21h54
  3. [phpBB] Envoi mail automatique quand on clique sur un bouton
    Par Nicca dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 08/12/2006, 11h42
  4. Afficher une TextArea quand on clique sur un bouton
    Par Goozisan dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 26/11/2006, 20h44

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