Problème dessin en Java
momop78
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
Bonjour,
Je souhaite faire une fenêtre qui permette d'afficher une ligne, un cercle ou un rectangle en fonction d'un bouton cliqué, en plus de cela, un texte affichant qu'elle forme est dessiné apparait en bas de ma fenêtre. Ce doit être tout bête mais je n'arrive pas à afficher la forme, alors que le reste s'affiche convenablement. Pourriez vous me dire où j'ai faux ?
Voici mon code :
public class EssaiMain {
public static void main(String[] args) {
JFrame fenetre = new JFrame ();
FormesGeometriques fenetre2 = new FormesGeometriques();
fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fenetre.setTitle("Cabinet Medical PIC'OUZ");
fenetre.setSize(700, 500);
fenetre.setVisible(true);
fenetre.add(fenetre2);
}
}
public class FormesGeometriques extends JPanel{
private static final long serialVersionUID = 1L;
public static String typeForme = "ligne";
private JButton jbLigne = new JButton ("Ligne");
private JButton jbCercle = new JButton ("Cercle");
private JButton jbRectangle = new JButton ("Rectangle");
private JPanel monPanel = new JPanel (new FlowLayout());
private JLabel jbForme = new JLabel ("Ligne");
private JPanel dessinPanel = new JPanel (new FlowLayout());
protected void paintComponent (Graphics g) {
super.paintComponent (g);
if ("ligne".equals(typeForme)) {
g.drawLine(10, 10, 200, 100);
}
else if ("cercle".equals(typeForme)){
g.drawOval(10, 10, 200, 100);
}
else {
g.drawRect(10, 10, 100, 200);
}
}
public FormesGeometriques (){
monPanel.add(jbLigne);
monPanel.add(jbCercle);
monPanel.add(jbRectangle);
this.setLayout(new BorderLayout());
this.add(monPanel, BorderLayout.NORTH);
this.add(jbForme, BorderLayout.SOUTH);
this.add(dessinPanel, BorderLayout.CENTER);
jbLigne.addActionListener(new FormeActionListener());
jbCercle.addActionListener(new FormeActionListener());
jbRectangle.addActionListener(new FormeActionListener());
}
public class FormeActionListener implements ActionListener {
@Override
public void actionPerformed (ActionEvent e) {
if (e.getSource().equals(jbLigne)) {
jbForme.setText ("Ligne");
FormesGeometriques.typeForme = "ligne";
}
else if (e.getSource().equals(jbCercle)) {
jbForme.setText ("Cercle");
FormesGeometriques.typeForme = "cercle";
}
else {
jbForme.setText ("Rectangle");
FormesGeometriques.typeForme = "rectangle";
}
}
}
}
Merci de votre aide.
Je souhaite faire une fenêtre qui permette d'afficher une ligne, un cercle ou un rectangle en fonction d'un bouton cliqué, en plus de cela, un texte affichant qu'elle forme est dessiné apparait en bas de ma fenêtre. Ce doit être tout bête mais je n'arrive pas à afficher la forme, alors que le reste s'affiche convenablement. Pourriez vous me dire où j'ai faux ?
Voici mon code :
public class EssaiMain {
public static void main(String[] args) {
JFrame fenetre = new JFrame ();
FormesGeometriques fenetre2 = new FormesGeometriques();
fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fenetre.setTitle("Cabinet Medical PIC'OUZ");
fenetre.setSize(700, 500);
fenetre.setVisible(true);
fenetre.add(fenetre2);
}
}
public class FormesGeometriques extends JPanel{
private static final long serialVersionUID = 1L;
public static String typeForme = "ligne";
private JButton jbLigne = new JButton ("Ligne");
private JButton jbCercle = new JButton ("Cercle");
private JButton jbRectangle = new JButton ("Rectangle");
private JPanel monPanel = new JPanel (new FlowLayout());
private JLabel jbForme = new JLabel ("Ligne");
private JPanel dessinPanel = new JPanel (new FlowLayout());
protected void paintComponent (Graphics g) {
super.paintComponent (g);
if ("ligne".equals(typeForme)) {
g.drawLine(10, 10, 200, 100);
}
else if ("cercle".equals(typeForme)){
g.drawOval(10, 10, 200, 100);
}
else {
g.drawRect(10, 10, 100, 200);
}
}
public FormesGeometriques (){
monPanel.add(jbLigne);
monPanel.add(jbCercle);
monPanel.add(jbRectangle);
this.setLayout(new BorderLayout());
this.add(monPanel, BorderLayout.NORTH);
this.add(jbForme, BorderLayout.SOUTH);
this.add(dessinPanel, BorderLayout.CENTER);
jbLigne.addActionListener(new FormeActionListener());
jbCercle.addActionListener(new FormeActionListener());
jbRectangle.addActionListener(new FormeActionListener());
}
public class FormeActionListener implements ActionListener {
@Override
public void actionPerformed (ActionEvent e) {
if (e.getSource().equals(jbLigne)) {
jbForme.setText ("Ligne");
FormesGeometriques.typeForme = "ligne";
}
else if (e.getSource().equals(jbCercle)) {
jbForme.setText ("Cercle");
FormesGeometriques.typeForme = "cercle";
}
else {
jbForme.setText ("Rectangle");
FormesGeometriques.typeForme = "rectangle";
}
}
}
}
Merci de votre aide.
A voir également:
- Problème dessin en Java
- Jeux java itel - Télécharger - Jeux vidéo
- Waptrick java football - Télécharger - Jeux vidéo
- Waptrick java voiture - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
Il est donc plutôt logique de rajouter un autre composant (ton DessinPanel) qui s'occupe de l'affichage de tes figures, comme ça FormesGeometriques reste exclusivement un conteneur.
Ce qu'il faudrait faire pour que ça fonctionne directement ce n'est pas redéfinir la méthode paintComponent (qui est la méthode des conteneurs), mais redéfinir la méthode paint (qui est la méthode des composants).
@Override public void paint(Graphics g) { super.paint(g); if ("ligne".equals(typeForme)) { g.drawLine(50, 50, 200, 100); } else if ("cercle".equals(typeForme)) { g.drawOval(50, 50, 200, 100); } else { g.drawRect(50, 50, 100, 200); } }Il manquera plus qu'un petit truc : mettre un à la fin de ton actionPerformed, sinon ça ne prendra pas en compte la modification.
Remarque : je pense que ton objet typeForme ne devrait pas être static.