Probleme d'affichage d'un JComponent redefini.

Probleme d'affichage d'un JComponent redefini. - Java - Programmation

Marsh Posté le 12-05-2005 à 01:36:25    

Salut voila j'ai petit probleme lorsque je veux afficher un JComponent que j'ai redefini et que j'ai mis dans ma JFrame ... ca s'affiche pas. Mais lorsque je le met dans une TabbedPane puis je pet la TabbedPane dans la JFrame ca marche, bref y a des blagues quoi.
 

Code :
  1. /*
  2. * GUI.java
  3. *
  4. * Created on 6 mai 2005, 01:18
  5. */
  6. package graphisme;
  7. import java.awt.*;
  8. import java.awt.event.*;
  9. import javax.swing.*;
  10. import javax.swing.border.*;
  11. /**
  12. *
  13. * @author Chronk
  14. */
  15. public class GUI extends JFrame{
  16.     private JTextField saisieFonction = new JTextField(15);
  17.  
  18.     private JTextArea resume;
  19.    
  20.     public GUI() {
  21.        
  22.        
  23.         // Fermer l'application quand on ferme la fenêtre
  24.         // *********** A REMPLIR
  25.         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  26.         setVisible(true);
  27.        
  28.         // Pour le moment, on utilise un WindowAdapter :
  29.         addWindowListener(new WindowAdapter() {
  30.             public void windowClosing(WindowEvent e) {
  31.                
  32.                 // *********** A REMPLIR
  33.                 System.exit(0);
  34.             }
  35.         });
  36.        
  37.         // Positionnement de la fenêtre
  38.         Toolkit tk = Toolkit.getDefaultToolkit();
  39.         Dimension d = tk.getScreenSize();
  40.         int hauteurEcran = d.height;
  41.         int largeurEcran = d.width;
  42.         setSize(largeurEcran/2, hauteurEcran/2);
  43.         setLocation(largeurEcran/4, hauteurEcran/4);
  44.        
  45.         /////////////////////////////////////////////////
  46.         // Panel pour entrer une fonction
  47.         // (avec un FlowLayout)
  48.         JPanel panelFonction = new JPanel();
  49.         panelFonction.setLayout(new FlowLayout());
  50.         Box boite = Box.createVerticalBox();
  51.         boite.add(new JLabel("Auteur" ));
  52.         boite.add(saisieFonction);
  53.         panelFonction.add(boite);
  54.         /////////////////////////////////////////////////
  55.         // BOUTON Tracer
  56.         JButton boutonTracer = new JButton("Tracer" );
  57.         boutonTracer.addActionListener(new ActionListener() {
  58.             public void actionPerformed(ActionEvent e) {
  59.                
  60.             }
  61.         });
  62.         boutonTracer.setToolTipText("Cliquez sur ce bouton pour lancer la recherche." );
  63.         panelFonction.add(boutonTracer);
  64.         ////////////////////////////////////////////////////////////////////////
  65.         // AGENCEMENT DES PANELS
  66.         JPanel all = new JPanel();
  67.         all.setLayout(new FlowLayout());
  68.        
  69.        
  70.         JPanel pourEcran = new JPanel();
  71.         pourEcran.setLayout(new FlowLayout());
  72.         MonPanel ecran = new MonPanel();
  73.         pourEcran.add(ecran);
  74.        
  75.         all.add(ecran);
  76.        
  77.         //all.add(panelFonction);
  78.        
  79.        
  80.         ////////////////////////////////////////////////////////////////////////
  81.         // CREATION DES TABBEDPANE - ONGLETS
  82.         /*
  83.         JTabbedPane tabbedPane = new JTabbedPane();
  84.        
  85.         ///Component panel2 = new JPanel();
  86.          
  87.         MonPanel ecran = new MonPanel();
  88.         tabbedPane.addTab("WAW", null, ecran , "Ecran" );
  89.         */
  90.        
  91.        
  92.         this.add(all);
  93.        
  94.         this.pack();
  95.         this.setVisible(true);
  96.     }
  97.    
  98.     public static void main(String[] args) {
  99.         GUI fenetre = new GUI();
  100.     }
  101.    
  102. } // GUILivre
  103. class MonPanel extends JComponent {
  104.        
  105.         /** variable de classe contenant l'image à afficher en fond */
  106.         private Image bg;
  107.        
  108.        
  109.         /** Surcharge de la fonction paintComponent() pour afficher notre image */
  110.          public void paintComponent(Graphics g) {
  111.            
  112.                 g.drawImage(bg,0,0,null);
  113.                // g.draw3DRect(10, 10, 70,  7, false);
  114.                 //L'origine
  115.                 g.drawLine(5, 5,10,10);
  116.                 g.drawLine(10, 5,10,10);
  117.                 g.drawLine(20, 50,10,10);
  118.                 g.drawLine(30, 5,10,10);
  119.                 g.drawOval(50, 50, 100, 200);
  120.          }
  121. }


 
Et donc comme j'ai dit plus haut si je passe par un JtabbedPane ca marche ... kesako ?
 
EDIT : Bon la question serait plutot ... Sachant que je peux mettre des JPanel dans un JPanel, pouquoi quand je redefini un JPanel et que je le mette dans un VRAI JPanel ca marche pas ?


Message édité par Chronoklazm le 12-05-2005 à 02:17:19

---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
Reply

Marsh Posté le 12-05-2005 à 01:36:25   

Reply

Marsh Posté le 12-05-2005 à 10:37:47    

Déjà, change this.add(all); par getContentPane().add(all);.


---------------
Le site de ma maman
Reply

Marsh Posté le 12-05-2005 à 16:48:46    

Pas genial ton truc ... ca change rien.


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
Reply

Marsh Posté le 12-05-2005 à 16:51:56    

Chronoklazm a écrit :

Pas genial ton truc ... ca change rien.


Peut-être.
 
Cependant, c'est une faute GRAVE de moins.
 
Adieu.


---------------
Le site de ma maman
Reply

Marsh Posté le 12-05-2005 à 16:55:58    

Pourquoi c'est une faute GRAVE stp ?


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
Reply

Marsh Posté le 12-05-2005 à 17:28:20    

Tiens.

Code :
  1. package graphisme;
  2. import javax.swing.*;
  3. import java.awt.*;
  4. public class GUI extends JFrame {
  5.     public GUI() {
  6.         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  7.         JPanel all = new JPanel();
  8.         all.add(new MonPanel());
  9.         getContentPane().add(all);
  10.         pack();
  11.         setVisible(true);
  12.     }
  13.     public static void main(String[] args) {
  14.         new GUI();
  15.     }
  16. }
  17. class MonPanel extends JComponent {
  18.     public void paintComponent(Graphics g) {
  19.         super.paintComponent(g);
  20.         g.setColor(Color.black);
  21.         g.drawLine(5, 5, 10, 10);
  22.         g.drawLine(10, 5, 10, 10);
  23.         g.drawLine(20, 50, 10, 10);
  24.         g.drawLine(30, 5, 10, 10);
  25.         g.drawOval(50, 50, 100, 200);
  26.     }
  27.     public Dimension getPreferredSize() {
  28.         return new Dimension(300, 200);
  29.     }
  30. }


---------------
Le site de ma maman
Reply

Marsh Posté le 12-05-2005 à 17:49:32    

Ah  .... d'accord en gros si je redefini pas une methode getPreferredSize() ca marche po.
 
Bon bein c'est nikel, merci beacoup.


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
Reply

Marsh Posté le 13-05-2005 à 01:27:21    

cherrytree > un pte explication steplé ?
quid s'il s'agissait d'un composant à taille variable?
à vrai dire, j'ai jamais pigé ce qu'il fallait attendre de la "preferred size" [:pingouino]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 13-05-2005 à 01:34:51    

chronoklazm > je te conseille d'aller voir la source de cette methode sur jcomponent, ou, à tout le moins, d'en lire la javadoc.


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 13-05-2005 à 01:55:21    

hmmm, j'allais te dire qu'il valait meme mieux utiliser un layoutmanager, mais je vois que t'en utilises un..
 
NRAYNAUD, LE TUTO §§§§


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 13-05-2005 à 01:55:21   

Reply

Marsh Posté le 13-05-2005 à 09:45:50    

Concrêtement, la property preferredSized d'un Container est issu du layout manager utilisé. Le layout manager calcule la dimension du Container étant donné les Components qui lui ont été ajouté. Pour n'importe quel layout manager, la dimension d'un objet MonPanel est [0, 0], car en terme de layout management, il ne contient rien. Dans la solution que je propose, je fixe arbitrairement la dimension de l'instance de MonPanel. La bonne solution est, à mon sens, de créer un layout manager custom.


---------------
Le site de ma maman
Reply

Marsh Posté le 13-05-2005 à 12:02:47    

un UI Delegate, plutot non? :o


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 13-05-2005 à 13:44:00    

ça revient presque au même.


---------------
Le site de ma maman
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed