Bonjour,

Je découvre JAVA. J'ai utilisé divers outils de programmation (non objet !) et je me fais des noeuds dans la tête car je suis très loin de "penser en JAVA" !

J'essaie de refaire une application dont je connais bien toute la partie calcul (elle fonctionne sur un PALM), les forums, didacticiels et autres livres m'ont appris plein de choses mais je bute sur un truc qui ne me semblait pas cacher de difficulté.

Le petit bout de code qui suit fonctionne parfaitement, il dessine une aiguille orientée en fonction d'un angle qui est saisi.
J'ai prévu un champ JTextField pour saisir cet angle et je suis incapable de le récupérer.
J'ai pourtant utilisé ce type d'objet dans plusieurs autres applications réalisées au fil des tutoriels, mais là, je coince.

J'ai vérifié que le listener du champ fonctionnait car il déclenche les opérations si on modifie sa valeur (comme un clic sur le bouton).
Mais, la valeur vRoute n'est pas accessible dans l'ActionPerformed ou dans la définition de la classe Panneau.
Je vous fais grâce de toutes mes tentatives qui auraient certainement leur place au musée des horreurs ...
Voici le code, les routines sont dans une classe à part et non représentées.

Merci de vos lumières ....

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
 import javax.swing.* ;
 
import java.awt.* ;
import java.awt.event.* ;
import java.util.Scanner;
@SuppressWarnings("serial")
 
class MaFenetre extends JFrame implements ActionListener
{ 
	MaFenetre ()
  { 
	setTitle ("Dessiner aigguille avec repaint") ;
    setSize (400, 500) ;
    Container contenu = getContentPane() ;
       // creation paneau pour le dessin
    pan = new Panneau() ;
    pan.setBackground (Color.cyan) ;
 
    JTextField vRoute = new JTextField (); // <-- pour saisir le cap
    vRoute.setText("000");
    pan.add(vRoute);
    vRoute.addActionListener (this) ;
    contenu.add(pan) ;
       // crÈation bouton "Aiguille"
    aig = new JButton ("Aiguille") ;
    contenu.add(aig, "South") ;
    aig.addActionListener (this) ;    
  }
  public void actionPerformed (ActionEvent ev)
  {
    pan.repaint() ;   // pour forcer la peinture du paneau des maintenant
  }
  private Panneau pan ;
  private JButton aig ;
}
class Panneau extends JPanel
{ 	 
	public void paintComponent(Graphics g)
 
  { 
	super.paintComponent(g) ;
	//saisie clavier du cap car je n'arrive pas à récupérer la valeur de vRoute du JTextField
  	Scanner lectureClavier = new Scanner(System.in);
  	System.out.print("Entrez la route : ");
	double capRose = lectureClavier.nextDouble();
 
  	capRose = Routines.roseToTrigo(capRose); // routine de changement de repaire pour les angles
  	int[] tabPoints  = new int[10];
	tabPoints = Routines.calcPoints(capRose); // calcule les points permettant de dessiner l'aiguille
	g.drawLine(tabPoints[0],tabPoints[1], tabPoints[8], tabPoints[9]);
    g.drawLine(tabPoints[8],tabPoints[9], tabPoints[2], tabPoints[3]);
    g.drawLine(tabPoints[2],tabPoints[3], tabPoints[4], tabPoints[5]);
    g.drawLine(tabPoints[4],tabPoints[5], tabPoints[6], tabPoints[7]);
    g.drawLine(tabPoints[6],tabPoints[7], tabPoints[0], tabPoints[1]);
  }
}
 
public class Repaint
{ public static void main (String args[])
  {
	MaFenetre fen = new MaFenetre() ;
    fen.setVisible(true) ;
  }
}