Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Mon interface ne paint() rien!! / debutant

3 réponses
Avatar
blackiss
Bonjour, j'ai un probleme avec une interface simple qui n'affiche pas ce qui
est dans paint. Quelqu'un peut-il me dire pourquoi?
Voici le code:

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


public class Interface extends javax.swing.JFrame

{
JLabel titre;
JLabel smiley;
JLabel temps;
JTextField decompte;
JPanel pan;


public Interface()
{
//new Init();//appel classe qui tire au sort
JFrame frame = new JFrame("Démineur");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(200,400);
frame.getContentPane().setLayout(new BorderLayout());
titre = new JLabel("DEMINEUR");//north
decompte = new JTextField("10");//west
// ImageIcon icon = createImageIcon("icon_smile.gif","");
smiley = new JLabel("");//center
temps = new JLabel("Temps");//east
pan = new JPanel();pan.setPreferredSize(new Dimension(200,200));//south
getContentPane().add(titre, BorderLayout.NORTH);
getContentPane().add(decompte, BorderLayout.WEST);
getContentPane().add(smiley, BorderLayout.CENTER);
getContentPane().add(temps, BorderLayout.EAST);
getContentPane().add(pan, BorderLayout.SOUTH);
//pan.addMouseListener(new Clic());
Graphics g = pan.getGraphics();
frame.setVisible(true);

}//init

public void paint(Graphics g)
{
super.paint(g);
int largeur, hauteur, origineX=0, origineY=0;
largeur = pan.getWidth();
hauteur = pan.getHeight();
setBackground(Color.blue);
g.setColor(Color.red);

for(int i=0; i<=10; i++)


g.drawLine(origineX, 0, origineX, hauteur);
origineX+=20;
}//for

for(int j=0;j<=10;j++)
{
g.drawLine(0, origineY, largeur, origineY);
origineY+=20;
}//for
g.drawString("hello",15,15);
}//paint

Avez vous une idée de ce qui bloque?

3 réponses

Avatar
Thibal
blackiss wrote:
Bonjour, j'ai un probleme avec une interface simple qui n'affiche pas ce qui
est dans paint. Quelqu'un peut-il me dire pourquoi?
Voici le code:

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


public class Interface extends javax.swing.JFrame

{
JLabel titre;
JLabel smiley;
JLabel temps;
JTextField decompte;
JPanel pan;


public Interface()
{
//new Init();//appel classe qui tire au sort
JFrame frame = new JFrame("Démineur");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(200,400);
frame.getContentPane().setLayout(new BorderLayout());
titre = new JLabel("DEMINEUR");//north
decompte = new JTextField("10");//west
// ImageIcon icon = createImageIcon("icon_smile.gif","");
smiley = new JLabel("");//center
temps = new JLabel("Temps");//east
pan = new JPanel();pan.setPreferredSize(new Dimension(200,200));//south
getContentPane().add(titre, BorderLayout.NORTH);
getContentPane().add(decompte, BorderLayout.WEST);
getContentPane().add(smiley, BorderLayout.CENTER);
getContentPane().add(temps, BorderLayout.EAST);
getContentPane().add(pan, BorderLayout.SOUTH);
//pan.addMouseListener(new Clic());
Graphics g = pan.getGraphics();
frame.setVisible(true);

}//init

public void paint(Graphics g)
{
super.paint(g);
int largeur, hauteur, origineX=0, origineY=0;
largeur = pan.getWidth();
hauteur = pan.getHeight();
setBackground(Color.blue);
g.setColor(Color.red);

for(int i=0; i<; i++)


g.drawLine(origineX, 0, origineX, hauteur);
origineX+ ;
}//for

for(int j=0;j<;j++)
{
g.drawLine(0, origineY, largeur, origineY);
origineY+ ;
}//for
g.drawString("hello",15,15);
}//paint

Avez vous une idée de ce qui bloque?


J'ai pas tout lu complètement en détail mais je pense que tu t'es bien
mélangé les pinceaux. Tu as crée une classe interface qui "extends"
JFrame, ce qui veut dire que tu disposes à son instantiation d'un objet
JFrame. Or, dans le constructeur, tu crées un autre objet JFrame. Es tu
sûr d'avoir besoin de ces deux fenêtres ou bien est ce là ton erreur ?

Parceque du coup, quand tu fais tes getContentPane(), c'est la méthode
getContentPane() de ton objet qui est appelée, ce qui veut dire que tu
ajoutes tes panels à ton instance de Interface. Alors que par contre
quand tu fais frame.xxx() c'est à ton objet "frame" que tu ajoutes des
comportements.

Et si il te manque des choses à l'affichage, c'est parceque tu ajoutes
tous tes panels à ta fenêtre Interface, alors que c'est à ta fenêtre
"frame" que tu fais setVisible(true) ;)

En conclusion, je pense qu'il y'a un objet frame en trop dans ton code.


Tiens moi au courant, bonne chance pour la suite,


Thibaut

Avatar
Vincent Cantin
Je te recommande de ne pas peindre dans une JFrame.
A la place, fais une classe qui etend d'un JPanel, et la redefinis la method
"void paint(Graphics g);"

Vincent
Avatar
blackiss
merci de vos réponses.

"Vincent Cantin" a écrit dans le message news:

Je te recommande de ne pas peindre dans une JFrame.
A la place, fais une classe qui etend d'un JPanel, et la redefinis la
method

"void paint(Graphics g);"

Vincent