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

Agents de placement/Fenêtres Java Discussion :

Séparation de fenêtre avec JSplitPane


Sujet :

Agents de placement/Fenêtres Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 390
    Par défaut Séparation de fenêtre avec JSplitPane
    Bonjour tout le monde,
    Voila mon probleme, je voudrais faire une fentre couper en deux avec un bouton qui permet de montrer ou cacher la partie inférieure.
    Le problème c'est que le JSplitPane réagit très bizarement.
    Je vous ai fait un petit exemple executable pour mieux comprendre.
    Celui qui arrive à le faire marcher parfaitement (sans changer le GridBagLayout en un autre layout parce que dans mon appli je suis obligé d'utiliser un GridBagLayout) me rendra un très grand service parce que ca fait dèjà un moment que je bloque la dessus.

    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
    import javax.swing.*;
    import java.awt.event.*;
    import java.awt.*;
     
    public class Test extends JFrame implements ActionListener {
     
    	public static final int WIDTH = 300;
    	public static final int L_HEIGHT = 100;
    	public static final int B_HEIGHT = 200;
     
    	JSplitPane jsp;
     
    	JPanel jp;
    	JTextField jtf;
    	JButton jb;
    	JTextPane jtp;
     
    	public Test () {
    		super("Test");
     
    		jsp = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
    		jsp.setDividerSize(5);
     
    		jtf = new JTextField(10);
    		jb = new JButton("Show TextPane");
    		jb.addActionListener(this);
    		jp = new JPanel(new GridBagLayout());
    		GridBagConstraints c = new GridBagConstraints();
     
    		c.fill = GridBagConstraints.NONE;
    		c.anchor = GridBagConstraints.CENTER;
     
    		c.gridx = 0;
    		c.gridy = 0;
    		c.gridwidth = 1;
    		c.gridheight = 1;
     
    		jp.add(jtf,c);
     
    		c.gridx = GridBagConstraints.RELATIVE;
    		c.gridwidth = GridBagConstraints.REMAINDER;
     
    		jp.add(jb,c);
    		jp.setSize(WIDTH,L_HEIGHT);
     
    		jsp.setTopComponent(jp);
    		jsp.setDividerLocation(1.0);
     
    		jtp = new JTextPane();
    		jtp.setSize(WIDTH,L_HEIGHT);
     
    		setSize(WIDTH,L_HEIGHT);
    		getContentPane().setLayout(new BorderLayout());
    		getContentPane().add(jsp, BorderLayout.CENTER);
    	}
     
    	public void actionPerformed(ActionEvent e) {
    		if (jsp.getBottomComponent() != null) {
    			setSize(WIDTH,L_HEIGHT);
     
    			jsp.setBottomComponent(null);
    			jsp.setDividerLocation(1.0);
    			jb.setText("Show Text Pane");
    		} else {
    			setSize(WIDTH,B_HEIGHT);
     
    			jsp.setBottomComponent(jtp);
    			jsp.setDividerLocation(L_HEIGHT);
    			jb.setText("Hide Text Pane");
    		}
    	}
     
    	public static void main (String arg[]) {
    		Test t = new Test();
    		t.setVisible(true);
    		t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	}
    }
    Merci d'avance
    a+

  2. #2
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 23
    Par défaut
    A ta place, j'aurais mis un CardLayout ds le panel du bas avec deux panels que tu utilises :
    - celui avec ton gridbaglayout
    - celui qui "cache"

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 34
    Par défaut
    Tu peux préciser ton pb? J'ai du mal le comprendre, parceque j'ai executé ton code, et j'ai l'impression que ca marche:

    au lancement, j'ai une fenetre contenant un textfield et un bouton "Show TextPane"
    quand je clique sur le bouton, la fenetre s'agrandit verticalement, et le textPane apparait dans la partie inferieure
    quand je reclique sur le bouton, la fenetre revient a l'etat initial.

    Est-ce different de ce que tu obtiens / ce que tu attends?

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 390
    Par défaut
    En fait le premier clic ne pose pas de probleme, il marche parfaitement.
    Ce sont les cllic suivant qui posent probleme.
    Moi la fenetre ne revient pas exactement comme avant. Je suis obligé de redimensionner la fenetre a la main manuellement pour afficher les composant, sinon le JSplitPane garde sa taille précédente et le bouton se retrouve hors cadre.
    J'ai essayé plein de combinaison, et a chaque fois un bug différent apparait.
    Mais sinon le comportement que tu me décrit, c'est exactement ce que je veux.
    Alors si ca marche chez toi et pas chez moi, c'est à n'y rien comprendre.
    Peut etre que ca vient de ma version de java. Ou du fait que je sois sous RedHat.
    Je suis en train de tester la solution de Rampa, on verra si ca marche mieux.

    Essai des clics successifs. Parce que j'avais trouvé une configuration qui plantait aux 3eme clics : la fenêtre s'agrandit mais le TextPane n'apparait pas, il y a un cadre gris à la place.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 34
    Par défaut
    J'ai essayé une bonne trentaine de clics, et le seul bug que j'ai pu constater, c'était que j'avais mal au doigt.
    Sinon, je suis sous XP, avec jdk/jre 1.5. J'ai essayé aussi avec une jre 1.4 et ca marche egalement.
    Par contre, Eclipse m'affiche un avertissement qui est peut etre la cause de ton pb:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       public static final int WIDTH = 300;
    "La zone Test.WIDTH masque une zone de type ImageObserver"
    Pour info, ImageObserver est une interface inplémentée par JFrame dont ta classe hérite. D'ou ta classe possédait déjà un attribut WIDTH, "hérité" de ImageObserver. Essaie donc de renommer ta variable pour voir si le pb vient de la.

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 390
    Par défaut
    Bon j'ai essayé avec le cardLyout et j'ai un petit souci toujours avec le JSplitPane (décidément).
    Il ne m'affiche que le cadre du bas et impossible de déplacer la barre de division.
    Je vous met le code. Si qq1 me dit que ca marche chez lui alors que sur mon pc ca ne marche pas, je crois que ma bécane va passer par la fenêtre.

    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
    import javax.swing.*;
    import java.awt.event.*;
    import java.awt.*;
     
    public class Test extends JFrame implements ActionListener {
     
    	public static final int WIDTH = 300;
    	public static final int L_HEIGHT = 100;
    	public static final int B_HEIGHT = 200;
     
    	JSplitPane jsp;
     
    	JPanel jp1;
    	JPanel jp2;
    	JTextField jtf;
    	JButton jb;
    	JTextPane jtp;
    	CardLayout cl;
     
    	boolean showTP = true;
     
    	public Test () {
    		super("Test");
     
    		jsp = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
    		jsp.setDividerSize(5);
     
    		jtf = new JTextField(10);
    		jb = new JButton("Show TextPane");
    		jb.addActionListener(this);
    		jp1 = new JPanel(new GridBagLayout());
    		GridBagConstraints c = new GridBagConstraints();
     
    		c.fill = GridBagConstraints.NONE;
    		c.anchor = GridBagConstraints.CENTER;
    		c.gridx = 0;
    		c.gridy = 0;
    		c.gridwidth = 1;
    		c.gridheight = 1;
     
    		jp1.add(jtf,c);
     
    		c.gridx = GridBagConstraints.RELATIVE;
    		c.gridwidth = GridBagConstraints.REMAINDER;
     
    		jp1.add(jb,c);
    		jp1.setSize(WIDTH,L_HEIGHT);
     
    		jsp.setTopComponent(jp1);		
    		jtp = new JTextPane();
    		jtp.setSize(WIDTH,L_HEIGHT);
    		jsp.setBottomComponent(jtp);
    		jsp.setDividerLocation(L_HEIGHT);
     
    		cl = new CardLayout();
     
    		this.setSize(WIDTH,L_HEIGHT);
    		this.getContentPane().setLayout(cl);
    		this.getContentPane().add("HidePanel",jp1);
    		this.getContentPane().add("ShowPanel",jsp);
    		/*this.getContentPane().setLayout(new BorderLayout());
    		this.getContentPane().add(jsp,BorderLayout.CENTER);*/
    	}
     
    	public void actionPerformed(ActionEvent e) {
    		if (showTP){
    			this.setSize(WIDTH,B_HEIGHT);
    			cl.next(this.getContentPane());
    			jb.setText("Hide TextPane");
    		} else {
    			this.setSize(WIDTH,L_HEIGHT);
    			cl.previous(this.getContentPane());
    			jb.setText("Show TextPane");
    		}
    		showTP = !showTP;
    	}
     
    	public static void main (String arg[]) {
    		Test t = new Test();
    		t.setVisible(true);
    		t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	}
    }

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 34
    Par défaut
    Ce coup ci ca marche pas chez moi non plus, j'obtiens exactement la meme chose que toi!

    PS: j'ai fait ma B.A. de la journée, je viens d'éviter une défenestration a un PC!

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

    Informations forums :
    Inscription : Avril 2005
    Messages : 390
    Par défaut
    J'ai essayé de changer le nom de la variable et ca ne change rien.
    J'ai déjà remarqué plusieurs bugs graphique swing sous Linux alors que la même application n'affiche pas ces bugs sous XP.
    C'est beau la portabilité Java.
    Pour info je suis sous RedHat avec JDK 1.4.1 et Eclipse 3.0.2

  9. #9
    Membre confirmé
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juin 2005
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Juin 2005
    Messages : 175
    Par défaut
    Citation Envoyé par barbu0055
    J'ai essayé de changer le nom de la variable et ca ne change rien.
    J'ai déjà remarqué plusieurs bugs graphique swing sous Linux alors que la même application n'affiche pas ces bugs sous XP.
    C'est beau la portabilité Java.
    Pour info je suis sous RedHat avec JDK 1.4.1 et Eclipse 3.0.2
    idem, ca m'est déjà arrivé plusieurs fois (alors ke la jdk etait la meme bien entendu). c'est quand meme assez inadmissible je trouve.

  10. #10
    Membre confirmé
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juin 2005
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Juin 2005
    Messages : 175
    Par défaut
    Citation Envoyé par barbu0055
    Si qq1 me dit que ca marche chez lui alors que sur mon pc ca ne marche pas, je crois que ma bécane va passer par la fenêtre.
    er si elle passait plutot sous windows ca serait mieux non?

  11. #11
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 390
    Par défaut
    Ca ne dépend pas de moi. Ce sont less bécanes du taf.
    Mais je compte bien faire des tests sur un pc tournant sous windows pour voir ce que ca donne.

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

    Informations forums :
    Inscription : Avril 2005
    Messages : 390
    Par défaut
    En ce qui concerne le CardLayout, je pense avoir trouvé d'ou venait le probleme, il vient du fait que je met le panel jp1 dans mon JSplitPane et dans mon CardLayout, et ca il aime pas, il ne peux avoir qu'un seul emplacement.

    Il faudrait donc en faire une copie, mais cette solution ne me plait pas tellement étant donné que le cadre du haut de mon appli n'est pas aussi légère que celle de l'exemple que g donné.

    Si qq1 voit une autre solution, elle sera la bienvenue

Discussions similaires

  1. [C#] Imprimer le contenu d'une fenêtre avec ascenseur
    Par biglong dans le forum Windows Forms
    Réponses: 6
    Dernier message: 07/08/2007, 00h29
  2. [Débutant] SWT Dimension de la fenêtre avec .setsize()
    Par steelidol dans le forum SWT/JFace
    Réponses: 6
    Dernier message: 20/04/2005, 21h57
  3. [eclipse][plugin] Comment avoir une fenêtre avec focus
    Par relivio dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 07/04/2004, 16h54
  4. fenêtre avec champs éditables
    Par LFC dans le forum Windows
    Réponses: 2
    Dernier message: 13/09/2003, 13h35
  5. Ouvrir fenêtre avec param
    Par Saber22 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 12/05/2003, 16h48

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