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 :

JInternalFrame : le positionement


Sujet :

AWT/Swing Java

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 318
    Par défaut JInternalFrame : le positionement
    Bonjour,
    Je ne parviens pas a coller l'une a coté de l'uatre les JInternalFrame de mon application. Au démarrage elles sont superposé en cascades.
    Voila le code:
    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
    package Integration;
     
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.IOException;
    import java.sql.SQLException;
     
    import javax.swing.JDesktopPane;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    import javax.swing.JPanel;
     
    import Carte.FenetrePrincipale;
    import Interface.Parametre;
    import Serveur.Ihm;
    import Supervision.Lanceur;
    import TestPing.First;
     
    public class Integration {
     
     
    	private JFrame f ;
    	private Lanceur lance;
    	private First first;
    	private Ihm ihm;
    	private Parametre param;
     
    	private FenetrePrincipale fp;
    	private JMenuBar jJMenuBar;
    	private JMenu fileMenu;
    	private JMenuItem exitMenuItem;
     
    	public Integration()
    	{
     
    	f = new JFrame();
    	f.setSize(800, 600);
    	f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	f.setJMenuBar(getJMenuBar());
    	lance = new Lanceur();
    	first = new First();
    	ihm = new Ihm();
     
    	try
    	{	fp = new FenetrePrincipale("test principal");
    	param = new Parametre("Gestion éléments supervisés");
    	}
    	catch(SQLException se){
    		se.fillInStackTrace();
    	}
    	catch(IOException io){
    		io.fillInStackTrace();
    	}
     
    	JDesktopPane desktopPane = new JDesktopPane();
        desktopPane.setBackground(Color.gray);
        JPanel contentPane = (JPanel)f.getContentPane();  
        contentPane.add(desktopPane,BorderLayout.CENTER);
     
        // Creation d'une sous-fenêtre
        ihm.jFrame.setVisible(true);
        ihm.jFrame.setResizable(true);
     
        desktopPane.add( ihm.jFrame);
     
    //  Creation d'une sous-fenêtre
        fp.frame.setVisible(true);
        fp.frame.setResizable(true);
        desktopPane.add( fp.frame);
     
        // Creation d'une sous-fenêtre
        first.jFrame.setVisible(true);
        first.jFrame.setResizable(true);
        desktopPane.add( first.jFrame);
     
        // Creation d'une autre sous-fenêtre
        lance.jFrame.setVisible(true);
        lance.jFrame.setResizable(true);
        desktopPane.add( lance.jFrame);
     
        // Creation d'une sous-fenêtre
        param.frame.setVisible(true);
        param.frame.setResizable(true);
        desktopPane.add( param.frame);
     
        // Autres Décorations
        contentPane.add(new JLabel("La barre de status"), BorderLayout.SOUTH);
     
        f.setVisible(true);    
    	}
     
     
    	/**
             * This method initializes jJMenuBar    
             *      
             * @return javax.swing.JMenuBar 
             */
    	private JMenuBar getJMenuBar() {
    		if (jJMenuBar == null) {
    			jJMenuBar = new JMenuBar();
    			jJMenuBar.add(getFileMenu());
    		}
    		return jJMenuBar;
    	}
     
    	/**
             * This method initializes jMenuItem    
             *      
             * @return javax.swing.JMenuItem        
             */
    	private JMenuItem getExitMenuItem() {
    		if (exitMenuItem == null) {
    			exitMenuItem = new JMenuItem();
    			exitMenuItem.setText("Quitter");
    			exitMenuItem.addActionListener(new ActionListener() {
    				public void actionPerformed(ActionEvent e) {
    					System.exit(0);
    				}
    			});
    		}
    		return exitMenuItem;
    	}
     
     
    	/**
             * This method initializes jMenu        
             *      
             * @return javax.swing.JMenu    
             */
    	private JMenu getFileMenu() {
    		if (fileMenu == null) {
    			fileMenu = new JMenu();
    			fileMenu.setText("Fichier");
    			fileMenu.add(getExitMenuItem());
    		}
    		return fileMenu;
    	}
     
     
     
    	public static void main(String[] args) {
    		new Integration();
    	}
     
    }

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 318
    Par défaut
    Je complète ma question en demandant si on peut ajouter des boutons de minimisation et maximisation sur une JInternalFrame ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 318
    Par défaut
    Je me reponds pour la maximalisation :
    JInternalFrame iFrame =

    new JInternalFrame( titre, // le titre de la fenêtre

    rs, // true si la fenêtre est retaillable

    c, // true si la fenêtre est fermable

    m, // true si la fenêtre est maximisable

    i); // true si la fenêtre est iconifiable

  4. #4
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut
    A toi de spécifier leurs tailles et leurs positions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    setSize(new Dimension(width,height));
    setLocation(x,y);

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 318
    Par défaut
    J'ai trouvé meilleur solution en faissant :
    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
    JDesktopPane desktopPane = new JDesktopPane();
        desktopPane.setBackground(Color.gray);
        desktopPane.setLayout(new GridLayout(0,2));
     
       JPanel contentPane = (JPanel)f.getContentPane();
       contentPane.add(desktopPane,BorderLayout.CENTER);
     
     
       	desktopPane.add( histo.jFrame);
     
        desktopPane.add( serveur.jFrame);
     
        desktopPane.add( ping.jFrame);
     
        desktopPane.add( carte.frame);
     
    	desktopPane.add( gestion.frame);
     
        // Autres Décorations
       contentPane.add(new JLabel("La barre de status"), BorderLayout.SOUTH);
     
        f.setVisible(true);
    Un soucis perssiste :

    Quand je clic sur l'une des 5 JInterFrames de ma JFrame , alors celui ci echange sa place avec l'JInterFrame qui est en premier (position 0,0).
    Savez comment évitez ce bug ?
    Au bout de quelques clics sur mes JInterFrames, elles s'arrêtent de bouger en premiere position.

  6. #6
    Membre émérite Avatar de sozie9372
    Inscrit en
    Mai 2005
    Messages
    713
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 713
    Par défaut
    J'ai pas très bien compris le dernier message... Tu cliques sur une JInternalFrame et elle change de place ?
    Si elle passe au premier plan, c'est normal, par contre elle doit pas changer de position comme ca !!!! Y'aurait pas un nain caché derrière qui la déplacerait ? Bon ok je sors...

  7. #7
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut
    Ca vient peut-être du layout...
    Mais je ne vois pas trop pourquoi il remettrai la JIF active en tête de liste.

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 318
    Par défaut
    Je me rexeplique , car meme pour moi c'est dur

    Alors imaginez mes 5 JInterFrames disposé en tableau de deux colonnes.
    Elles sont insérées dans le tableau a la suite les unes des autres.
    La premiere a la première case (0,0) et la derniere en (0,2)
    Je vais cliquez sur l'avant dernière (1,1) :

    Premier test
    - Je prend la fenetre dans la souris (en cliquant sur sa barre) & elle se dessine en première position.
    Je deplace alors ma frame que j'ai dans la souris vers la première position et la le doublon s'efface en passant le composant dessus.
    Je me retrouve avec un trou en (0,0).

    -Je clique DANS la fenetre de l'avant dernier (1,1), celle ci se range à la place de la première et déplace les autres fenetres vers la droite.
    --> Bref en cliquant sur un JInternalFrame il se déplace en première position et décallant d'une position tous les autres composants.

    Par contre, les composants qui se situe, dans l'ordre de rangement du GridLayout(0,2), après l'InternalFrame cliqué ne bougent pas.

    Aie aie aie ^^

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 318
    Par défaut
    Bon le GridLayout ne me convient plus ,

    par contre j'ai réusssi à Iconifier mes JInterFrames, mais le soucis est qu'elles les icones se place en bas de mon Panel.
    Je cherche à déplacer ces icones , c'est possible ?

  10. #10
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut
    Comme je te le disais, crées-toi une routine qui te place tes JIF en fonction de leur nombre :
    1) tu récupères le nombre de JIF (nbJIF)
    2) tu récupères les dimensions de ton desktopPane (width, height)
    3) tu places la ième JIF à la position [i*width/nbJIF; 0]
    En n'oubliant pas de faire du
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jif[i].setMaximum(false);
    A toi de voir si tu veux agencer différemment (verticalement ou horizontalement, fixer un nombre de composants max en largeur ou en hauteur, etc)

  11. #11
    Membre émérite Avatar de sozie9372
    Inscrit en
    Mai 2005
    Messages
    713
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 713
    Par défaut
    Le mieux est de fixer un layout null, vu ce que tu veux faire, tu seras plus à l'aise avec des algos de tris, calculs et traitement
    Tiens pour arranger en mosaïque si ca t'interesse :
    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
     
    public void arrangeMosaic() {
    		_cascade = false;
    		JInternalFrame[] frames = this.getAllFrames();
    		_nbFrames = frames.length;
    		int n = _nbFrames;
    		for (int i = 0; i < _nbFrames; ++i)
    			if (frames[i].isIcon()) //
    				--n;
    		int bottom = 0;
    		if (n != _nbFrames)
    			bottom = 30;
    		if (n == 0)
    			return;
    		int nbColumns = (int) Math.sqrt(n), nLines;
    		if (n != nbColumns * nbColumns)
    			nbColumns++;
    		if ((n - 1) / nbColumns + 1 < nbColumns)
    			nLines = nbColumns - 1;
    		else
    			nLines = nbColumns;
    		int dx = getWidth() / nbColumns;
    		int dy = getHeight() / nLines - bottom;
    		int k = 0;
    		for (int i = 0; i < nbColumns; i++) {
    			for (int j = 0; j < nbColumns && k < n; j++, k++)
    				frames[i * nbColumns + j].setBounds(j * dx, i * dy, dx, dy);
    		}
    	}

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 318
    Par défaut
    Merci à vous deux , je vais essayer les deux solutions , je vous dis quoi.

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 318
    Par défaut
    Ta methode mosaïque fonctionne bien , me reste mon soucis d'icones. Car j'ai 5 fenêtres est je voudrais qu'elles s'iconifient au 6eme trous.
    Pour l'instant ellle s'iconifient en bas a gauche , elles se retrouvent cachées par l'une des JInternalFrame.

    Peut on choisir l'endroit du desktopPane où les fenêtres s'iconifient ?

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 318
    Par défaut
    J'ai réussi à garder la 5eme position pour mes icônes.

    Je réouvre un sujet pour ce qui est du déplacement des JInternalFrame iconifiées.

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

Discussions similaires

  1. [JInternalFrame][JDialog] Connaître le frame de dépar
    Par TreizeSegments dans le forum Agents de placement/Fenêtres
    Réponses: 7
    Dernier message: 21/07/2009, 11h55
  2. Comment ajouter une icone à une JInternalFrame
    Par wassimb dans le forum AWT/Swing
    Réponses: 11
    Dernier message: 12/07/2006, 16h13
  3. [Débutant] JFontChooser pour JinternalFrame...
    Par doudine dans le forum AWT/Swing
    Réponses: 10
    Dernier message: 10/08/2004, 13h02
  4. [Débutante] JInternalFrame et JOptionPAne
    Par ju972 dans le forum Agents de placement/Fenêtres
    Réponses: 6
    Dernier message: 24/05/2004, 15h03
  5. [JInternalFrame] Modale ?
    Par Aminos dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 04/03/2003, 11h38

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