2014-09-13 3 views
3

Comment puis-je créer deux méthodes de peinture? Lorsque j'essaie d'utiliser deux méthodes de peinture sur eux ne fonctionne jamais. Si cela ne peut être que je veux peindre en dehors de la méthode de peinture de base et je ne sais pas comment. Par exemple:Comment utiliser deux méthodes de peinture dans Java? Ou en dehors de la méthode de peinture de base

public class test extends JFrame { 

private JPanel contentPane; 

/** 
* Launch the application. 
*/ 
public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       test frame = new test(); 
       frame.setVisible(true); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

public void paint(Graphics g) { 
    g.fillRect(100, 100, 100, 100); 
} 

public void pp(Graphics g) { 
    g.fillRect(250, 100, 100, 100); 
} 

/** 
* Create the frame. 
*/ 
public test() { 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setBounds(100, 100, 450, 300); 
    contentPane = new JPanel(); 
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
    contentPane.setLayout(new BorderLayout(0, 0)); 
    setContentPane(contentPane); 
} 

} 
+1

Ces deux méthodes, ont des responsabilités différentes '(peinture et paintComponent)'. À mon avis, d'abord apprendre les bases de la peinture, à partir de [Performing Custom Painting] (http://docs.oracle.com/javase/tutorial/uiswing/painting/), puis essayez-vous à ce sujet. Ne pas 'paint' sur un conteneur de niveau supérieur, déléguer plutôt cette tâche à un conteneur, comme 'JPanel/JComponent', et peindre dans la méthode' paintComponent'. 'paint()' appelle en interne 'paintComponent()' automatiquement. En outre, essayez de ne pas utiliser 'AbsolutePositiong', utilisez à la place un' LayoutManager' approprié –

+1

Cela pourrait vous aider http://docs.oracle.com/javase/tutorial/uiswing/painting/step2.html – Jack

+0

S'il vous plaît * s'il vous plaît * lire * un guide * complet * sur la programmation orientée objet. Aviez-vous connu des méthodes que vous n'auriez jamais eu à poser cette question. – Qix

Répondre

1

J'ai trouvé un moyen.

public void paint(Graphics g) { super.paint(g); draw(g); draw2(g); }

public void draw(Graphics g){ 
    g.fillRect(100, 100, 100, 100); 
} 

public void draw2(Graphics g){ 
    g.setColor(Color.blue); 
    g.fillRect(200, 100, 100, 100); 
} 
5

Quand je suis en train d'utiliser deux méthodes de peinture sur eux travaille jamais.

paintComponent(...) n'est pas une méthode de JFrame. Chaque fois que vous tentez de remplacer une méthode, vous devez utiliser l'annotation @Override et le compilateur vous le dira lorsque vous tenterez de remplacer une méthode qui n'existe pas.

En général, pour les autres composants Swing, la méthode paint(...) est responsable de l'appel de la méthode paintComponent(...). Vous ne devez donc pas remplacer la méthode paint(). Voir: A Closer Look at the Paint Mechanism pour plus d'informations.

De toute façon, vous ne devez pas surcharger paint() sur un JFrame. Lisez toute la section sur Performing Custom Painting à partir du lien tutoriel pour un exemple de travail de la façon dont la peinture personnalisée doit être faite.

Questions connexes