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);
}
}
}
}
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
Override ['getPreferredSize()'] (http://stackoverflow.com/q/7229226/230513) et 'pack()' la fenêtre englobante pour établir la géométrie initiale. – trashgod
Où devrais-je faire cela? Et sur quoi? – user1315621