2012-10-03 3 views
2

J'écris un jeu en Java swing, et j'ai quelques couches de classes que je dois implémenter.Java Swing ajouter un composant pour le jeu

Voici les classes:

  • Main() // met en place la fenêtre, fait un jeu, et setVisible
    • jeu() // Match nul toile principale du jeu, conserve des données sur le jeu, demande à chaque objet à se dessiner
      • Conseil() // tire les chambres et les graphiques de fond
        • chambre() // Dessine le truc dans la chambre, garde la trace de l'emplacement
          • Articles() // Emplacement, la couleur, la fonction, etc
            • CollectibleItems() // étend les objets
            • Créatures() // étend les objets
      • ControlPanel () // Mettre un bouton dans cela fait quelque chose
      • StatePanel() // Mettre du texte dans le panneau de la pièce, et si oui ou non il est verrouillé

Classe principale:

import java.awt.*; 

import javax.swing.*; 

import javax.swing.border.*; 

public class Main extends JFrame { 
    public static void main (String [] args) { 
     new Main(); 
    } 

    public Main() { 
     // Window setup                    
     setSize (700, 450); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     Container content = getContentPane(); 
     content.setLayout(new BorderLayout()); 


     // Put a Game in                   
     Game myGame=new Game();  
     myGame.setBorder(new LineBorder(Color.black, 9)); 
     content.add(myGame, BorderLayout.CENTER); 

      setVisible (true); 
    } 

Ceci est ma classe de jeu. De là, je veux ajouter le tableau et les panneaux, et je veux que le conseil d'administration ajoute les salles, etc. Je ne sais pas comment encapsuler les classes et les ajouter et setVisible. Je sais comment le faire dans Main, mais est-ce qu'il y a un moyen d'ajouter des trucs à Game en utilisant un type de chose content.add() similaire?

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

public class Game extends JComponent { 
    public void paintComponent (Graphics g) { 

     JPanel ControlPanel=new JPanel(); 
     ControlPanel.setLayout(new FlowLayout()); 
     ControlPanel.setBorder(new LineBorder(Color.red, 9)); 
    } 
} 

TL; DR- comment encapsuler et afficher différentes classes? Nouveau pour JavaSwing ...

Répondre

3

Pour commencer par ... NE FAITES PAS CECI !! DÉJÀ!!

public void paintComponent (Graphics g) { 

    JPanel ControlPanel=new JPanel(); 
    ControlPanel.setLayout(new FlowLayout()); 
    ControlPanel.setBorder(new LineBorder(Color.red, 9)); 
} 

Aussi, vous devez appeler super.paintComponent aussi bien, sauf si vous avez vraiment, vraiment bonne raison de ne pas. Ces méthodes font beaucoup de travail de fond important.

Ne modifiez jamais un composant dans le contexte de la méthode paintXxx. Cela vous mettra dans une boucle infinie et finalement consommer tout votre CPU.

Je commencerais par avoir une lecture par

Questions connexes