2014-05-05 3 views
0

(Ce programme ne va vraiment finir par faire tout ce que je suis juste en utilisant cela pour apprendre/expérience)Comment peindre en utilisant 2 classes différentes

Quand je lance mon code, je voulais une classe à peindre un cercle noir et une autre classe pour peindre un cercle bleu qui l'intersecte. Mais la façon dont je l'ai maintenant quand une instance de Class2 est ajouté, il écrase Class1 dans le cadre.

Je peux voir ce qui ne va pas Je ne suis pas sûr de savoir comment le réparer.

Est-il possible de faire ceci ou êtes-vous censé tout faire sous la même peinture()?

public class Practice{ 
    public static GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice(); 
    public static final int dWidth = gd.getDisplayMode().getWidth(); 
    public static final int dHeight = gd.getDisplayMode().getHeight(); 

    public static void main(String[] args){ 
     heyo(); 
     } 

    public static void heyo(){ 
     JFrame window = new JFrame(); 
     Class1 obj1 = new Class1(); 
     Class2 obj2 = new Class2(); 

     window.setSize(dWidth, dHeight); 
     window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     window.setResizable(false); 
     window.add(obj1); 
     window.add(obj2); 

     window.setVisible(true); 
     } 

} 

public class Class1 extends JComponent{ 

    public void paint(Graphics b){ 
     Graphics2D brush = (Graphics2D)b; 
     brush.setColor(Color.black); 

     brush.drawOval(100, 100, 50, 50); 

    } 

} 

public class Class2 extends JComponent{ 

    public void paint(Graphics c){ 
     Graphics2D brush = (Graphics2D)c; 
     brush.setColor(Color.blue); 

     brush.drawOval(200, 200, 50, 50); 

    } 

} 
+0

N'utilisez pas la méthode 'paint()'. utilisez à la place 'paintComponent()' – Braj

+0

N'oubliez pas d'appeler 'super.paintComponent();' inside overridden 'paintComponent()' méthode – Braj

Répondre

0
  • JFrame par l'utilisation par défaut BorderLayout et vous avez ajouté deux composants au centre.

  • Utilisez JPanel et ajoutez les composants dans le JPanel d'abord, puis enfin ajouter le JPanel dans le JFrame

  • Ne pas remplacer paint() méthode utiliser à la place paintComponent()

Voici l'exemple de code:

class Class1 extends JComponent { 

    @Override 
    public void paintComponent(Graphics b) { 
     super.paintComponent(b); 
     ...  
    } 

} 

class Class2 extends JComponent { 

    @Override 
    public void paintComponent(Graphics c) { 
     super.paintComponent(c); 
     ...  
    } 

} 


public static void heyo() { 
    SwingUtilities.invokeLater(new Runnable() { 

     @Override 
     public void run() { 
      JFrame window = new JFrame(); 

      JPanel panel = new JPanel(new GridLayout(1, 2)); 
      Class1 obj1 = new Class1(); 
      Class2 obj2 = new Class2(); 
      panel.add(obj1); 
      panel.add(obj2); 
      ... 

      window.getContentPane().add(panel); 
      window.setVisible(true); 
     } 
    }); 
} 

enter image description here

+0

Cela a beaucoup aidé. Merci beaucoup – Orion

Questions connexes