|
|
|
|
Bonjour,
le code ci dessous m'affiche ma fenetre, mon fond, mes bouttons, mais rien ne s'affiche dans la console lorsque je tente de cliquer sur les bouttons, ou de taper quelquechose au clavier...
Merci d'avance
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.*;
public class fenetre extends JFrame implements ActionListener {
JButton jbPlay;
JButton jbClose;
JLabel label;
//***********french notes.. :D*************
public fenetre (String titre) { //création de la méthode constructeur
setTitle (titre);
Container contenu = getContentPane();
JButton jbPlay = new JButton("", new ImageIcon("jouer.gif"));
JButton jbClose = new JButton("", new ImageIcon("exit.gif"));
jbPlay.setFocusPainted(false);
jbPlay.setBorderPainted(false); // ces trois lignes enelvent la bordure du boutton
jbPlay.setContentAreaFilled(false);
jbClose.setFocusPainted(false);
jbClose.setBorderPainted(false); // ces trois lignes sont les meme que la haut :)
jbClose.setContentAreaFilled(false);
contenu.setLayout(null);
JLabel label = new JLabel();
Image image = Toolkit.getDefaultToolkit().createImage("background.gif");// nouveau JLabel backgound
label.setIcon(new ImageIcon(image));
contenu.add(jbPlay, 0);
contenu.add(jbClose, 1);
contenu.add(label, 2);
label.setBounds(0, 0, 900, 800);
jbPlay.setBounds(50, 445, 850, 78);
jbClose.setBounds(50, 640, 158, 50);
ActionListener play = null;
jbPlay.addActionListener(play);
ActionListener close = null;
jbClose.addActionListener(close);
setSize(907,832);
setResizable(false);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setVisible(true);
}
public void actionPerformed(ActionEvent play) {
System.out.print("it work !!!");
}}Configuration: Windows XP Internet Explorer 7.0
L'erreur vient de là:
ActionListener play = null; jbPlay.addActionListener(play); ActionListener close = null; jbClose.addActionListener(close); Comme tu as implémenté l'interface Listener, et que tu as ta méthode actionPerformed, il faut que tu fasses appel à ta propre classe puisqu'elle implémente Listener. La solution serait donc: jbPlay.addActionListener(this); jbClose.addActionListener(this); |
Ho! merci ! merci beaucoup!
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.*;
public class fenetre extends JFrame implements ActionListener {
JButton jbPlay;
JButton jbClose;
JLabel label;
//***********french notes.. :D*************
public fenetre (String titre) { //création de la méthode constructeur
setTitle (titre);
Container contenu = getContentPane();
JButton jbPlay = new JButton("", new ImageIcon("jouer.gif"));
JButton jbClose = new JButton("", new ImageIcon("exit.gif"));
jbPlay.setFocusPainted(false);
jbPlay.setBorderPainted(false); // ces trois lignes enelvent la bordure du boutton
jbPlay.setContentAreaFilled(false);
jbClose.setFocusPainted(false);
jbClose.setBorderPainted(false); // ces trois lignes sont les meme que la haut :)
jbClose.setContentAreaFilled(false);
contenu.setLayout(null);
JLabel label = new JLabel();
Image image = Toolkit.getDefaultToolkit().createImage("background.gif");// nouveau JLabel backgound
label.setIcon(new ImageIcon(image));
contenu.add(jbPlay, 0);
contenu.add(jbClose, 1);
contenu.add(label, 2);
label.setBounds(0, 0, 900, 800);
jbPlay.setBounds(50, 445, 850, 78);
jbClose.setBounds(50, 640, 158, 50);
ActionListener play = null;
jbPlay.addActionListener(this);
ActionListener close = null;
jbClose.addActionListener(this);
setSize(907,832);
setResizable(false);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setVisible(true);
}
public void actionPerformed(ActionEvent play) {
jeu();
}
private void jeu() {
jeu j = new jeu("Doode");
}}
La classe jeu crée une nouvelle fenetre, mais je ne trouve pas comment fermer celle ci... j'ai même essayé de faire croire au programme que le joueur cliquait sur la croix... |
Merci, et pour finir, es-ce normal que quand je presse n'importe quel bouton, cela m'effectue toujours la même action...(m'ouvre ma seconde fenêtre et ne ferme rien)
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.*;
public class fenetre extends JFrame implements ActionListener {
JButton jbPlay;
JButton jbClose;
JLabel label;
//***********french notes.. :D*************
public fenetre (String titre) { //création de la méthode constructeur
setTitle (titre);
Container contenu = getContentPane();
JButton jbPlay = new JButton("", new ImageIcon("jouer.gif"));
JButton jbClose = new JButton("", new ImageIcon("exit.gif"));
jbPlay.setFocusPainted(false);
jbPlay.setBorderPainted(false); // ces trois lignes enelvent la bordure du boutton
jbPlay.setContentAreaFilled(false);
jbClose.setFocusPainted(false);
jbClose.setBorderPainted(false); // ces trois lignes sont les meme que la haut :)
jbClose.setContentAreaFilled(false);
contenu.setLayout(null);
JLabel label = new JLabel();
Image image = Toolkit.getDefaultToolkit().createImage("background.gif");// nouveau JLabel backgound
label.setIcon(new ImageIcon(image));
contenu.add(jbPlay, 0);
contenu.add(jbClose, 1);
contenu.add(label, 2);
label.setBounds(0, 0, 900, 800);
jbPlay.setBounds(50, 445, 850, 78);
jbClose.setBounds(50, 640, 158, 50);
ActionListener play = null;
jbPlay.addActionListener(this);
ActionListener close = null;
jbClose.addActionListener(this);
setSize(907,832);
setResizable(false);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setVisible(true);
}
public void actionPerformed(ActionEvent play) {
jeu();
}
public void actionPerformed2(ActionEvent close) {
dispose();
}
private void jeu() {
jeu j = new jeu("Doode");
}}
|
Attention, tu confonds.
public void actionPerformed(ActionEvent event) {
if(event.getSource() == jbPlay) {
// Tout ce qui concerne le bouton play
}
if(event.getSource() == jbClose) {
// Tout ce qui concerne le bouton close
}
J'ai deux questions : 1/ ta class Jeu (d'ailleurs, on débute TOUJOURS par convention le nom d'une classe par une majuscule) s'ouvre-t-elle dans la même fenêtre que le bouton qui le lance ou dans une fenêtre séparemment? 2/ ton bouton close, qu'est-il sensé fermer au juste? L'interface principale ou ton interface de jeu? |
Alors, tout d'abord, merci, ma classe jeu s'ouvre dans une autre fenêtre que celle ci, par souci de praticité:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.*;
public class jeu extends JFrame {
JLabel fond;
public jeu (String titre) {
setTitle (titre);
Container contenu2 = getContentPane();
contenu2.setLayout(null);
JLabel fond = new JLabel();
Image image = Toolkit.getDefaultToolkit().createImage("fond.gif");
fond.setIcon(new ImageIcon(image));
contenu2.add(fond);
fond.setBounds(0, 0, 900, 800);
setResizable(false);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setVisible(true);
}}
et je souhaite fermer la fenetre du menu, donc je ne sais pas si je doit mettre dispose(contenu); ou contenu.dispose(); car cela ne marche pas.. |
Premier point :
class Bidule extends JFrame implements ActionListener, WindowListener {
}
Ensuite, il faut ajouter un écouteur à ta JFrame, puis implémenter la méthode qui réalise les actions sur la fermeture des fenêtres :
this.addWindowListener(this);
public void windowClosing(WindowEvent event) {
System.out.println("Fenêtre fermée");
fermer();
}
On peut faire une méthode qui ferme la JFrame courante, à laquelle on fait appel (la méthode, pas la JFrame)
public void fermer() {
dispose(); // Ferme la frame courante
}
|
Huh? Pardon?
ActionListener play = null; // la c'est bon j'initialise mon listener
jbPlay.addActionListener(this); //la je le place
ActionListener close = null; // pareil
jbClose.addActionListener(this); // pareil
setSize(907,832); // taille de la fenetre, on s'en passe
setResizable(false); // pas important
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); // normal
setVisible(true); // heuresement ^^
}
public void actionPerformed(ActionEvent event) { // la on crée notre méthode qui récupère tout ce qui est lié aux action de l'utilisateur
if(event.getSource() == jbPlay) { // si l'action vient de lobjet jbplay
System.out.print("jeuu"); // tu fais ca
}
if(event.getSource() == jbClose) { // mais si ca vient de jbclose
System.out.print("test"); // affiche ça !
}
}
public void jeu(){
jeu j = new jeu("Doode");
}}
Tout m'a l'air bon!!! si mes petites notes sont fausses, c'est que je n'ai pas compris mon propre code o_O Merci d'avance : |
Cette portion du code :
ActionListener play = null; // la c'est bon j'initialise mon listener ActionListener close = null; // pareil ne sert absolument à rien. Tes références pointent vers null et ne sont jamais utilisées. Ne le prends pas mal mais si tu n'as pas compris ce que j'ai écrit, c'est que tu n'as pas compris jusqu'au bout l'utilisation des Listeners, et ça je ne peux pas faire grand chose. :/ |
La seule chose je ne comprend pas c'est la windows listener... Je veux que lorsqu'on clique sur mon autre bouton cela ferme la fenêtre, je n'ai pas compris pourquoi tu comptes mettre un écouteur sur la fenêtre elle même...
public fenetre (String titre) { //création de la méthode constructeur
setTitle (titre);
Container contenu = getContentPane();
JButton jbPlay = new JButton("", new ImageIcon("jouer.gif"));
JButton jbClose = new JButton("", new ImageIcon("exit.gif"));
jbPlay.setFocusPainted(false);
jbPlay.setBorderPainted(false); // ces trois lignes enelvent la bordure du boutton
jbPlay.setContentAreaFilled(false);
jbClose.setFocusPainted(false);
jbClose.setBorderPainted(false); // ces trois lignes sont les meme que la haut :)
jbClose.setContentAreaFilled(false);
contenu.setLayout(null);
JLabel label = new JLabel();
Image image = Toolkit.getDefaultToolkit().createImage("background.gif");// nouveau JLabel backgound
label.setIcon(new ImageIcon(image));
contenu.add(jbPlay, 0);
contenu.add(jbClose, 1);
contenu.add(label, 2);
label.setBounds(0, 0, 900, 800);
jbPlay.setBounds(50, 445, 850, 78);
jbClose.setBounds(50, 640, 158, 50);
jbPlay.addActionListener(this);
jbClose.addActionListener(this);
setSize(907,832);
setResizable(false);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setVisible(true);
}
public void actionPerformed(ActionEvent event) {
if(event.getSource() == jbPlay) {
System.out.print("jeuu");
}
if(event.getSource() == jbClose) {
System.out.print("test");
}
}
public void jeu(){
jeu j = new jeu("Doode");
}}
|