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 :

Placer un JEditorPane


Sujet :

AWT/Swing Java

  1. #1
    SGJ
    SGJ est déconnecté
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 59
    Par défaut Placer un JEditorPane
    Bonjour,

    Le code ci-dessous crée un frame contenant un panel dont la taille est fixée à 900X900. Ce panel contient juste un JEditorPanel. Comme j'ai appelé setLayout(null) au début, c'est à moi de gérer la taille et la localisation de JEditrorPanel par rapport à son parent. C'est pour cela que j'ai introduit la classe MyEditorPanel dont le but est seulement d'appelr setBounds pour placer JEditorPanel.

    Ce que je ne comprends pas est que si j'appelles au début setLayout(new BorderLayout()) au lieu de setLayout(null), Ca marche et j'ai mon JEditorPanel au bon endroit. Par contre, si je garde l'appel setLayout(null) au début, je ne vois plus JEditorPanel sur l'écran. Je m'attendais plutôt au contraire.

    Pourtant j'ai déjà utilisé cette technique pour d'autre composants que JEditorPanel (des JPanel) et ça marche avec setLayout(null).

    J'ai isolé le code dans un programme simple que j'ai collé ci-dessous où j'ai toujours le même problème. J'espere que quelqu'un pourra m'aider.

    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
     
    import javax.swing.*;
    import java.awt.*;              
     
    class MyEditorPanel extends JEditorPane 
    {
     
    	protected void paintComponent(Graphics g) 
    	{
        this.setBounds(200,200,200,200);
        super.paintComponent(g);
    	}
    }
     
    public class EditorPanelTest extends JPanel
    {
    	 public Dimension getPreferredSize() {
    	       int w = 900; 
    	       int h = 900;
    	       return new Dimension(w,h);
    	 }	  
     
        public EditorPanelTest() {
    //        setLayout(new BorderLayout());
            setLayout(null);
     
            MyEditorPanel editorPane = createEditorPane();
            add(editorPane);
        }
     
        private MyEditorPanel createEditorPane() {
        	MyEditorPanel editorPane = new MyEditorPanel();
            editorPane.setEditable(false);
            editorPane.setText("totototototootototo tototototo"+"\n"+"                     titititi");
            return editorPane;
        }
     
        public static void main(String[] args) {
            JFrame frame = new JFrame("EditorPanelTest");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            JComponent newContentPane = new EditorPanelTest();
            frame.setContentPane(newContentPane);
            frame.pack();
            frame.setVisible(true);
        }
    }

  2. #2
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 109
    Par défaut
    A mon avis c'est juste une question d'organisation
    je n'ai fait que mettre a un endroit plus judicieux le "setBounds" :

    Tu devrais garder la méthode paintComponent uniquement pour ce qui est dessin, sinon a chaque fois que ca se redessine la methode setbounds serat appelé, ce qui alourdi inutilement le programme.

    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
     
     
    import javax.swing.*;
    import java.awt.*;              
     
     class MyEditorPanel extends JEditorPane 
    {
     
    	public MyEditorPanel(){
    		super();
    		setBounds(200,200,200,200);
    	}
     
    	protected void paintComponent(Graphics g) 
    	{
        super.paintComponent(g);
    	}
    }
     
     public class EditorPanelTest extends JPanel
    {
    	 public Dimension getPreferredSize() {
    	       int w = 900; 
    	       int h = 900;
    	       return new Dimension(w,h);
    	 }	  
     
        public EditorPanelTest() {
            //setLayout(new BorderLayout());
            setLayout(null);
     
            MyEditorPanel editorPane = createEditorPane();
            add(editorPane);
        }
     
        private MyEditorPanel createEditorPane() {
        	MyEditorPanel editorPane = new MyEditorPanel();
            editorPane.setEditable(false);
            editorPane.setText("totototototootototo tototototo"+"\n"+"                     titititi");
            return editorPane;
        }
     
        public static void main(String[] args) {
            JFrame frame = new JFrame("EditorPanelTest");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            JComponent newContentPane = new EditorPanelTest();
            frame.setContentPane(newContentPane);
            frame.pack();
            frame.setVisible(true);
        }
    }

  3. #3
    SGJ
    SGJ est déconnecté
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 59
    Par défaut
    EN fait, dans le programme d'origine, les paramètres de setBounds ne sont pas constants mais sont calculés de façon à prendre en compte le resizing de la fenêtre principale.

    Je garde donc le setBounds dans le paintcomponent, mais il faut en plus le mettre à l'initialisation comme tu l'as fait, sinon paintcomponent ne sera jamais appelé et du coup le composant restera toujours en dehors de l'écran.

    Merci pour ton aide.

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

Discussions similaires

  1. [JEditorPane]ajout de balises html
    Par almass dans le forum Composants
    Réponses: 12
    Dernier message: 12/05/2004, 17h07
  2. Réponses: 3
    Dernier message: 12/03/2004, 19h34
  3. [JEditorPane]Selectionner une ligne
    Par )3lade dans le forum Composants
    Réponses: 8
    Dernier message: 20/01/2004, 10h29
  4. [XSLT] Visualisation d'un fichier xml dans un jEditorPane
    Par Yannos94 dans le forum Format d'échange (XML, JSON...)
    Réponses: 16
    Dernier message: 09/01/2004, 17h50
  5. [MFC](encapsulation ADO) ou placer le code
    Par philippe V dans le forum MFC
    Réponses: 2
    Dernier message: 13/06/2002, 14h58

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