Utilisation de frame.add()
Bonjour,
je suis plutôt novice en Java, et je souhaite afficher plusieurs éléments (des petites croix rouges) dans une fenêtre. Malheureusement, seul le dernier de mes appels de frame.add() semble être pris en compte puisque seule la dernière croix s'affiche. Or, le code suivant affiche bien deux boutons, mais une seule des deux croix s'affiche.
Code:
1 2 3 4
| frame.add(new JButton("OK"),BorderLayout.NORTH);
frame.add(new JButton("OK"),BorderLayout.SOUTH);
frame.add(new JPoints(5,5))
frame.add(new JPoints(10,5)) |
Ma question est donc : pourquoi les deux boutons s'affichent-ils, alors qu'une seule des deux croix ne s'affiche? Et comment faire pour que les deux croix s'affichent? Je suppose que le problème vient de ma méconnaissance du fonctionnement de JFrame, et j'aimerais mieux le comprendre. :)
Voici le code des trois classes principalement utilisées. Merci d'avance pour vos réponses !
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
public class Afficheur {
public static void main(String[] args) {
Carte excarte = new Carte();
excarte.noeuds.put("2", new Caracteristiques(20,30));
excarte.noeuds.put("1", new Caracteristiques(4,5));
int largeur = 300;
int hauteur = 300;
JFrame frame = new JFrame("Ma Carte");
frame.setSize(largeur,hauteur);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
for (int i = 1; i<=excarte.noeuds.size(); i++) {
frame.add(new JPoints(excarte.noeuds.get(String.valueOf(i)).lat,excarte.noeuds.get(String.valueOf(i)).lon));
}
frame.setVisible(true);
}
} |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| import javax.swing.JComponent;
import javax.swing.JFrame;
public class JPoints extends JComponent {
private static final PointsUI UI = new PointsUI();
public JPoints(double x, double y) {
UI.x = (int)x;
UI.y = (int)y;
setUI(UI);
}
public static void display(JFrame frame, double x, double y) {
frame.add(new JPoints(x,y));
frame.setVisible(true);
}
} |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JComponent;
import javax.swing.plaf.ComponentUI;
public class PointsUI extends ComponentUI {
int x,y;
@Override
public void paint(Graphics g, JComponent compo) {
JPoints c = (JPoints)compo;
Color oldColor=g.getColor();
g.setColor(Color.RED);
g.drawLine(x-2,y-2,x+2, y+2);
g.drawLine(x-2,y+2,x+2,y-2);
g.setColor(oldColor);
}
} |