2016-07-04 1 views
0

J'ai une classe MapPanel qui étend JPanel. J'affiche quelques objets dans cette grille et je veux que certains d'entre eux soient reliés par une ligne. J'essaie donc de dessiner ces lignes dans MapPanel.paintComponent mais aucune ligne n'a été montrée. Je vérifie les paramètres de ligne (x1, y1, x2, y2) par System.out.println() et ils sont corrects (type 0 < param < 600, mesures qui s'adaptent parfaitement au panneau). J'essaye aussi de ne dessiner qu'une ligne avec des paramètres fixes mais j'ai le même problème.DrawLine sur GridBagLayout ne montre rien

public class NewMapPanel extends JPanel { 

    private static final long serialVersionUID = 1L; 

    private GameMap gameMap; 
    private Grid grid; 
    private JPanel contentPanel; 

    public NewMapPanel() { 
     this.setBackground(Color.white); 
    } 

    public void updateMap(GameMap gameMap) { 
     this.gameMap = gameMap; 

     ...load the object into my custom object grid ... 

     contentPanel = new JPanel(new GridBagLayout()); 
     contentPanel.setBackground(Color.GREEN); 
     GridBagConstraints c = new GridBagConstraints(); 

     // draw the grid 
     for (City city : gameMap.getCities().values()) { 
      CityPanel cityPanel = new CityPanel(city, grid); 

      c = new GridBagConstraints(); 
      c.gridx = grid.getColumn(city); 
      c.gridy = grid.getRow(city); 
      c.gridwidth = 1; 
      c.gridheight = 1; 
      c.fill = GridBagConstraints.BOTH; 
      c.anchor = GridBagConstraints.CENTER; 

      contentPanel.add(cityPanel, c); 
     } 

     add(contentPanel, BorderLayout.CENTER); 
    } 


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

     contentPanel.setSize(super.getWidth(), super.getHeight()); 
     grid.setSize(super.getWidth(), super.getHeight()); //to get the right parameters to be used into drawLine 


     for (City city1 : gameMap.getCities().values()) { 
      int x1 = grid.getBarycenterX(city1); 
      int y1 = grid.getBarycenterY(city1); 
      for (City city2 : city1.getAdjacentCities()) { 
       int x2 = grid.getBarycenterX(city2); 
       int y2 = grid.getBarycenterY(city2); 

       System.out.println("(" + x1 + "," + y1 + ") -> (" + x2 + "," + y2 + ")"); 
       g.drawLine(x1, y1, x2, y2); 

      } 
     } 


    } 

} 
+0

Nous n'avons pas la classe City, s'il vous plaît poster un [mcve] que nous pouvons copier-coller et quand nous le faisons, il devrait compiler et montrer votre problème – Frakcool

+0

Override ['getPreferredSize()'] (http://stackoverflow.com/q/7229226/230513) et 'pack()' la fenêtre englobante pour établir la géométrie initiale. – trashgod

+0

Où devrais-je faire cela? Et sur quoi? – user1315621

Répondre

0

Avez-vous essayé de définir la couleur? g.setColor (Color.black);

+0

Ça ne marche pas – user1315621