Probleme de Keylistener

Résolu
kururin Messages postés 9 Date d'inscription jeudi 5 juin 2003 Statut Membre Dernière intervention 1 avril 2006 - 30 janv. 2006 à 21:17
kururin Messages postés 9 Date d'inscription jeudi 5 juin 2003 Statut Membre Dernière intervention 1 avril 2006 - 1 avril 2006 à 12:14
Salut à tous,



J'ai une question super bateau... Pourquoi lorsque je clique sur 'k', rien ne se passe avec mon code suivant ??

C'est du code repris dans le tutorial de sun, auquel j'ai juste voulu rajouter un KeyListener.



********************************** class ClickMeApp *****************************************

package clickOnMe_pak;

/**

* ClickMeApp.java is an application that compiles and runs

* under J2SE v5.0. It requires two additional files:

* ClickMe.java

* Spot.java

*/



import javax.swing.SwingUtilities;

import javax.swing.JLabel;

import javax.swing.JFrame;

import java.awt.BorderLayout;



public class ClickMeApp implements Runnable {

/**

* This constructor creates an instance of ClickMeApp,

* which creates and shows a window containing a

* ClickMe component.

*/



public ClickMeApp() {

/*

* Tells the event-dispatching thread (used to

* display and handle events of a Swing GUI) to

* call the run method of "this" (the ClickMeApp

* object this constructor created). The

* argument to invokeLater must implement the

* Runnable interface, which guarantees that

* it defines the run method.

*/

SwingUtilities.invokeLater(this);

}



/**

* Creates and shows the GUI. This method should be

* invoked on the event-dispatching thread.

*/

public void run() {

createAndShowGUI();

}



/**

* Brings up a window that contains a ClickMe component.

* For thread safety, this method should be invoked from

* the event-dispatching thread.

*/

private static void createAndShowGUI() {

//Make sure we have nice window decorations.

JFrame.setDefaultLookAndFeelDecorated(true);



//Create and set up the window.

JFrame frame = new JFrame("ClickMeApp");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);



//Set up the layout manager.

frame.getContentPane().setLayout(new BorderLayout());



//Add the ClickMe component.

ClickMe component = new ClickMe();

frame.getContentPane().add(component, BorderLayout.CENTER);



//Add an explanatory label.

JLabel kp = new JLabel("Keyboard") ;

frame.getContentPane().add(kp,BorderLayout.SOUTH);



//Display the window.

frame.pack();

frame.setVisible(true);

}



//This method is automatically executed.

public static void main(String[] args) {

//Create an instance of ClickMeApp.

new ClickMeApp();

}

}



********************************** class ClickMe *****************************************

package clickOnMe_pak;



import javax.swing.BorderFactory;

import javax.swing.JPanel;

import java.awt.*;

import java.awt.event.*;



public class ClickMe extends JPanel


implements KeyListener, MouseListener {



private static final long serialVersionUID = 1L;

private Spot spot = null;

private static final int RADIUS = 8;

private Color spotColor = new Color(107, 116, 2); //olive

public int id = 0 ;



/** Creates and initializes the ClickMe component. */

public ClickMe() {

addKeyListener(this);

addMouseListener(this);





//Hint at good sizes for this component.

setPreferredSize(new Dimension(RADIUS * 30, RADIUS * 15));

setMinimumSize(new Dimension(RADIUS * 4, RADIUS * 4));



//Request a black line around this component.

setBorder(BorderFactory.createLineBorder(Color.BLACK));

}



/**

* Paints the ClickMe component. This method is

* invoked by the Swing component-painting system.

*/

public void paintComponent(Graphics g) {

/**

* Copy the graphics context so we can change it.

* Cast it to Graphics2D so we can use antialiasing.

*/

Graphics2D g2d = (Graphics2D)g.create();



//Turn on antialiasing so that painting is smooth.

g2d.setRenderingHint(

RenderingHints.KEY_ANTIALIASING,

RenderingHints.VALUE_ANTIALIAS_ON);



//Paint the background.

g2d.setColor(Color.WHITE);

g2d.fillRect(0, 0, getWidth() - 1, getHeight() - 1);



//Paint the spot.

if (spot != null) {

int radius = spot.getSize();

g2d.setColor(spotColor);

g2d.fillOval(spot.x - radius, spot.y - radius,


radius * 2, radius * 2);


g2d.drawString(Integer.toString(id),20, 20)
;

}



if (id == 1)

{

g2d.drawString("coucou",20,20) ;

}

}



//Methods required by the MouseListener interface.

public void mousePressed(MouseEvent event) {

if (spot == null) {

spot = new Spot();

spot.setSize(RADIUS);

}

spot.x = event.getX();

spot.y = event.getY();

repaint();

}

public void mouseClicked(MouseEvent event) {}

public void mouseReleased(MouseEvent event) {}

public void mouseEntered(MouseEvent event) {}

public void mouseExited(MouseEvent event) {}



//Keyboard methods

public void keyPressed(KeyEvent e) {}

public void keyReleased(KeyEvent e) {}

public void keyTyped(KeyEvent e) {

if(e.getKeyChar() == 'k')

id = 1 ;

repaint();

}

}



***************************** class Spot *********************************

package clickOnMe_pak;

/**

* Spot.java is used by ClickMe.java.

*/



public class Spot {

//instance variables

private int size;

public int x, y;



//constructor

public Spot() {

x = -1;

y = -1;

size = 1;

}



//methods for access to the size instance variable

public void setSize(int newSize) {

if (newSize >= 0) {

size = newSize;

}

}

public int getSize() {

return size;

}

}







Merci d'avance pour votre aide



K.

7 réponses

bloofi Messages postés 388 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 3 mai 2006 2
30 janv. 2006 à 23:47
Il faut que ton panel ait le focus, essaye un this.requestFocus(true) a la fin de la methode paint (méthode tres bourin)
3
bloofi Messages postés 388 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 3 mai 2006 2
30 janv. 2006 à 21:44
Essaye :



public void keyTyped(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_K)
id = 1 ;
repaint();
}

ou sinon essaye de mettre tes 3 lignes dans la méthode keyPressed



et mets des sorties consoles un peu partout pour savoir si l'event a bien eu lieu.
0
kururin Messages postés 9 Date d'inscription jeudi 5 juin 2003 Statut Membre Dernière intervention 1 avril 2006
30 janv. 2006 à 23:18
Merci pour la réponse... mais en fait ca ne passe jamais dans la methode keyTyped (ou meme keyPressed).

J'ai mis des sorties consoles partout mais rien ne se passe pour le keyboard, alors que pour la souris y'a pas de souci :(



Franchement ca doit etre tout con mais je vois vraiment ou peut etre l'erreur.

Merci encore

K.
0
kururin Messages postés 9 Date d'inscription jeudi 5 juin 2003 Statut Membre Dernière intervention 1 avril 2006
31 janv. 2006 à 13:33
Cool :)

Ca marche !! merci beaucoup !!

Tu me dis que c'est "très bourrin"... y'aurait un autre moyen sinon ?

K.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bloofi Messages postés 388 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 3 mai 2006 2
31 janv. 2006 à 19:25
il y aurait le moyen de donner le focus a ton panel une fois et qu'il ne le perde plus.
0
cs_manella Messages postés 5 Date d'inscription samedi 4 mars 2006 Statut Membre Dernière intervention 30 mars 2006
30 mars 2006 à 14:50
salut, je suis une etudiente tunisuenne entrain de preperer
mon projet fin d etude, je demandais de l aide,
il ma ete demander de travailler avec les forme 2d(point2d et
courbe2d)
je dois suivre les ver(en utilisant l aspect de plume"comme ds photoshop" ) d une lunettes en utilisant point2d et cubiccurve2d
et puis sauvegarder cette forme ds une base pour par la suite
la récuperer,
pouvez vous m aider meme pour un debut tel ke en clikan sur la fenetre
un point sera affiché puis dessin d une 2 eme pt et les relier avec une courbe.
please help me
0
kururin Messages postés 9 Date d'inscription jeudi 5 juin 2003 Statut Membre Dernière intervention 1 avril 2006
1 avril 2006 à 12:14
Salut...



Le mieux serait que tu refasses un topic avec un titre plus adequate pour que tout le monde puisse mieux t'aider.

K.
0
Rejoignez-nous