2011-11-13 2 views
1

Bonjour, Je travaille sur un problème et j'ai des problèmes avec Swing. Je n'ai aucun problème à travailler avec des classes qui étendent JFrame ou JComponent, mais lorsque j'essaie d'utiliser une classe que j'écris qui étend JPanel, elle n'apparaît jamais et rien de ce que j'appelle sur ce panneau n'apparaît, y compris l'ajout de custom JCcomposé à cela. Quelle est la procédure générale pour créer une classe d'extension JPanel et la définir comme volet de contenu à utiliser dans un JFrame?Problèmes d'extension de JPanels

+2

"Prolonge" implique un est-une relation. Sauf si vous faites un conteneur léger, ne pas étendre 'JPanel'. – Jeffrey

+1

Pour une aide plus ciblée, veuillez fournir un représentant [sscce] (http://sscce.org/). – trashgod

Répondre

2

Vous devriez être ajouté votre classe qui étend le Jpanel à un conteneur comme JFrame.Une classe qui étend le JPanel ne montre rien puisque c'est un composant non conteneur.

3

I (mon point de vue personnel) ne peut voir rien de mal à s'étend JComponent comme JComponent, JPanel, JLabel, plus Inheritance versus composition, par exemple

import java.awt.*; 
import javax.swing.*; 

public class CustomComponent extends JFrame { 

    private static final long serialVersionUID = 1L; 

    public CustomComponent() { 
     setTitle("Custom Component Test"); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     add(new CustomComponents()); 
     pack(); 
     setMinimumSize(getSize());// enforces the minimum size of both frame and component 
     setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       CustomComponent main = new CustomComponent(); 
       //main.display(); 
      } 
     }); 
    } 
} 

class CustomComponents extends JComponent { 

    private static final long serialVersionUID = 1L; 

    @Override 
    public Dimension getMinimumSize() { 
     return new Dimension(100, 100); 
    } 

    @Override 
    public Dimension getPreferredSize() { 
     return new Dimension(400, 300); 
    } 

    @Override 
    public void paintComponent(Graphics g) { 
     int margin = 10; 
     Dimension dim = getSize(); 
     super.paintComponent(g); 
     g.setColor(Color.red); 
     g.fillRect(margin, margin, dim.width - margin * 2, dim.height - margin * 2); 
    } 
}