OVH Cloud OVH Cloud

Canvas et JPanel

3 réponses
Avatar
Guillaume
Bonjour à tous

J'ai un probleme, pas moyen d'afficher un Canvas dans une fenêtre au moyen
d'un JPanel, voici le code (hyper simple)

----------------Essai.java---------------------
package essai;

public class Main {

public Main() {
}

public static void main(String[] args) {
Fenetre f = new Fenetre();
}
}

--------------Fenetre.java---------------------

package essai;

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

public class Fenetre extends JFrame {

Panel myPanel = new Panel();
Dessin d = new Dessin();
JButton b = new JButton("Bouton 1");

public Fenetre() {
super("Essai");
setBounds(100,100,640,480);
this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);

myPanel.add(d);
myPanel.add(b);
this.getContentPane().add(myPanel);

setVisible(true);
}
}

-------------Dessin.java--------------------------
package essai;

import java.awt.*;

public class Dessin extends Canvas {

public Dessin() {
}

public void paint(Graphics g) {
g.setColor(new Color(255,255,255));
g.fillRect(0,0,100,100);
g.setColor(new Color(255,0,0));
g.drawLine(0,0,100,100);
}
}

La fenêtre affiche bien le bouton mais que le bouton !
Quelqu'un a-t-il une idée sachant que je ne peux pas faire directement :
this.getContentPane().add(d); (cela marche mais je ne peux pas afficher en
même temps le bouton et le Canvas)

Merci d'avance
Guy

3 réponses

Avatar
Arnaud Berger
Bonjour,

Est-il impératif d'utiliser Canvas ?

Si ce n'est pas le cas, autant utiliser directement un composant Swing tel
que JPanel (exemple ci-dessous).
Il me semble qu'il n'est pas conseillé de mélanger des composants AWT
(Canvas, Button, etc..) avec des composants Swing (JButton, JPanel...)

public class Dessin extends JPanel {
public Dessin() {
}
public void paintComponent(Graphics g) {
g.setColor(new Color(255,255,255));
g.fillRect(0,0,100,100);
g.setColor(new Color(255,0,0));
g.drawLine(0,0,100,100);
}
}

Cordialement,

Arnaud

"Guillaume" a écrit dans le message news:
d3fv63$pq3$
Bonjour à tous

J'ai un probleme, pas moyen d'afficher un Canvas dans une fenêtre au moyen
d'un JPanel, voici le code (hyper simple)

----------------Essai.java---------------------
package essai;

public class Main {

public Main() {
}

public static void main(String[] args) {
Fenetre f = new Fenetre();
}
}

--------------Fenetre.java---------------------

package essai;

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

public class Fenetre extends JFrame {

Panel myPanel = new Panel();
Dessin d = new Dessin();
JButton b = new JButton("Bouton 1");

public Fenetre() {
super("Essai");
setBounds(100,100,640,480);
this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);

myPanel.add(d);
myPanel.add(b);
this.getContentPane().add(myPanel);

setVisible(true);
}
}

-------------Dessin.java--------------------------
package essai;

import java.awt.*;

public class Dessin extends Canvas {

public Dessin() {
}

public void paint(Graphics g) {
g.setColor(new Color(255,255,255));
g.fillRect(0,0,100,100);
g.setColor(new Color(255,0,0));
g.drawLine(0,0,100,100);
}
}

La fenêtre affiche bien le bouton mais que le bouton !
Quelqu'un a-t-il une idée sachant que je ne peux pas faire directement :
this.getContentPane().add(d); (cela marche mais je ne peux pas afficher en
même temps le bouton et le Canvas)

Merci d'avance
Guy




Avatar
Arnaud Berger
Cependant, si Canvas est indispensable, il faut lui donner une taille

exemple :

public Dessin() {
setSize(100,100);
}

L'équivalent pour JPanel sera :

public Dessin() {
setPreferredSize(new Dimension(100,100));
}

Cordialement,

Arnaud


"Guillaume" a écrit dans le message news:
d3fv63$pq3$
Bonjour à tous

J'ai un probleme, pas moyen d'afficher un Canvas dans une fenêtre au moyen
d'un JPanel, voici le code (hyper simple)

----------------Essai.java---------------------
package essai;

public class Main {

public Main() {
}

public static void main(String[] args) {
Fenetre f = new Fenetre();
}
}

--------------Fenetre.java---------------------

package essai;

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

public class Fenetre extends JFrame {

Panel myPanel = new Panel();
Dessin d = new Dessin();
JButton b = new JButton("Bouton 1");

public Fenetre() {
super("Essai");
setBounds(100,100,640,480);
this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);

myPanel.add(d);
myPanel.add(b);
this.getContentPane().add(myPanel);

setVisible(true);
}
}

-------------Dessin.java--------------------------
package essai;

import java.awt.*;

public class Dessin extends Canvas {

public Dessin() {
}

public void paint(Graphics g) {
g.setColor(new Color(255,255,255));
g.fillRect(0,0,100,100);
g.setColor(new Color(255,0,0));
g.drawLine(0,0,100,100);
}
}

La fenêtre affiche bien le bouton mais que le bouton !
Quelqu'un a-t-il une idée sachant que je ne peux pas faire directement :
this.getContentPane().add(d); (cela marche mais je ne peux pas afficher en
même temps le bouton et le Canvas)

Merci d'avance
Guy




Avatar
Guillaume
OK merci ... çà marche pas mal !
Guy

"Arnaud Berger" a écrit dans le message de
news: d3g1kn$a35$
Bonjour,

Est-il impératif d'utiliser Canvas ?

Si ce n'est pas le cas, autant utiliser directement un composant Swing tel
que JPanel (exemple ci-dessous).
Il me semble qu'il n'est pas conseillé de mélanger des composants AWT
(Canvas, Button, etc..) avec des composants Swing (JButton, JPanel...)

public class Dessin extends JPanel {
public Dessin() {
}
public void paintComponent(Graphics g) {
g.setColor(new Color(255,255,255));
g.fillRect(0,0,100,100);
g.setColor(new Color(255,0,0));
g.drawLine(0,0,100,100);
}
}

Cordialement,

Arnaud

"Guillaume" a écrit dans le message news:
d3fv63$pq3$
Bonjour à tous

J'ai un probleme, pas moyen d'afficher un Canvas dans une fenêtre au
moyen
d'un JPanel, voici le code (hyper simple)

----------------Essai.java---------------------
package essai;

public class Main {

public Main() {
}

public static void main(String[] args) {
Fenetre f = new Fenetre();
}
}

--------------Fenetre.java---------------------

package essai;

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

public class Fenetre extends JFrame {

Panel myPanel = new Panel();
Dessin d = new Dessin();
JButton b = new JButton("Bouton 1");

public Fenetre() {
super("Essai");
setBounds(100,100,640,480);
this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);

myPanel.add(d);
myPanel.add(b);
this.getContentPane().add(myPanel);

setVisible(true);
}
}

-------------Dessin.java--------------------------
package essai;

import java.awt.*;

public class Dessin extends Canvas {

public Dessin() {
}

public void paint(Graphics g) {
g.setColor(new Color(255,255,255));
g.fillRect(0,0,100,100);
g.setColor(new Color(255,0,0));
g.drawLine(0,0,100,100);
}
}

La fenêtre affiche bien le bouton mais que le bouton !
Quelqu'un a-t-il une idée sachant que je ne peux pas faire directement :
this.getContentPane().add(d); (cela marche mais je ne peux pas afficher
en
même temps le bouton et le Canvas)

Merci d'avance
Guy