frabill | Bonjour,
après avoir lu pas mal de tutoriaux et testé des tonnes de solutions, je viens chercher de l'aide car il y a un truc bête que je n'ai pas dû comprendre dans toutes ces docs...
Mon problème : je souhaite dessiner des objets graphiques (des points par exemple) sur un Jpanel (qui à terme comportera une image en arrière plan, mais chaque chose en son temps).
Pour le moment j'en suis réduit à tester des bouts de code pour comprendre ce qu'il se passe... le code de mon composant point :
Code :
- import java.awt.Color;
- import java.awt.Graphics;
- import java.awt.Graphics2D;
- import java.awt.geom.Ellipse2D;
- import javax.swing.JComponent;
- public class GraphPoint extends JComponent {
- Ellipse2D.Double point = null;
- Color color = null;
- public GraphPoint(int _x, int _y, Color _color) {
- color = _color;
- point = new Ellipse2D.Double(_x, _y, 20, 20);
- }
- public void move(int _x, int _y) {
- point.x = _x;
- point.y = _y;
- }
- protected void paintComponent(Graphics g) {
- Graphics2D g2d = (Graphics2D) g;
- g2d.setColor(color);
- g2d.fill(point);
- }
- }
|
et mon code pour mettre un point dans le panel :
Code :
- import java.awt.BorderLayout;
- import java.awt.Color;
- import java.awt.Dimension;
- import java.awt.FlowLayout;
- import java.util.ArrayList;
- import javax.swing.JFrame;
- import javax.swing.JPanel;
- public class CopyOftestVisu {
- private ArrayList<GraphPoint> graphPoints = new ArrayList<GraphPoint>(); // @jve:decl-index=0:
- private JFrame jFrame = null; // @jve:decl-index=0:visual-constraint="288,144"
- private JPanel jContentPane = null;
- private JPanel jPanel = null; // @jve:decl-index=0:visual-constraint="203,157"
- /**
- * This method initializes jFrame
- *
- * @return javax.swing.JFrame
- */
- private JFrame getJFrame() {
- if (jFrame == null) {
- jFrame = new JFrame();
- jFrame.setSize(new Dimension(400, 400));
- jFrame.addWindowListener(new java.awt.event.WindowAdapter() {
- public void windowClosing(java.awt.event.WindowEvent e) {
- jFrame.dispose();
- }
- });
- }
- return jFrame;
- }
- private void addPoint(int _x, int _y, Color color) {
- GraphPoint pt1 = new GraphPoint(_x, _y, color);
- graphPoints.add(pt1);
- jFrame.getContentPane().add(pt1, BorderLayout.CENTER);
- }
- public static void main(String[] args) {
- CopyOftestVisu app = new CopyOftestVisu();
- //frame
- app.getJFrame();
- //panel
- JPanel panel = new JPanel();
- panel.setLayout(new FlowLayout());
- panel.setBackground(Color.BLUE);
- app.getJFrame().add(panel);
- //ajout d'un point au panel : ne fonctionne pas
- GraphPoint pt1 = new GraphPoint(100, 100, Color.RED);
- app.graphPoints.add(pt1);
- panel.add(pt1);
- //ajout d'un point à la frame : fonctionne
- // app.addPoint(150, 150, Color.RED);
- app.getJFrame().setVisible(true);
- }
- }
|
Le point s'affiche bien lorsque je le met dans la Jframe, mais pas quand je le met dans je Jpanel...
quel est le problème avec le panel ? Problème de layout ? |