2017-02-20 4 views
-1

J'essaie de changer le texte de JTextField en cliquant sur le JFreeChart.Comment définir le texte de textfield dynamiquement dans Java?

J'ai défini deux classes, défini le JTextField dans une classe nommée First et JFreeChart dans une autre classe nommée Second. Et j'ai créé un code pour récupérer la valeur des coordonnées x et y lorsque je clique sur les points dessinés sur le graphique.

Le code utilise un écouteur de souris pour extraire les coordonnées. Maintenant, je veux passer ces valeurs de coordonnées dans le champ de texte défini dans l'autre classe First. Mais je suis incapable d'obtenir ces valeurs dynamiquement.

J'ai créé quatre champs de texte, mais je veux que seulement deux d'entre eux mettent à jour dynamiquement la valeur sur le clic. Le champ de texte affiche la valeur 1 pour newX et newY que j'ai affecté. Si je supprime la valeur 1 que j'ai affectée à la variable newX et newY, elle affiche NullPointerException.

Suggérez-moi un bon moyen de faire la même chose. Je veux quand je clique sur les points dessinés sur le graphique, ils sont affichés dans le champ de texte. Le champ de texte montre la valeur 1 pour newX et newY que j'ai assigné.

Le code que je l'ai utilisé pour récupérer la valeur de coordonnées x et y est comme suit et nommé cette classe comme première:

Number newX = 1; //value assigned 
    Number newY = 1; 
    chartPanel.addChartMouseListener(new ChartMouseListener() { 
      public void chartMouseClicked(final ChartMouseEvent event){ 
       try { 
       XYItemEntity ce = (XYItemEntity) event.getEntity(); 
       newX = ce.getDataset().getX(ce.getSeriesIndex(), 
ce.getItem()); 
       newY = ce.getDataset().getY(ce.getSeriesIndex(), ce.getItem()); 
       // retrieving the x and y co-ordinates. 

       System.out.println("chartMouseClicked at" + " " + newX + " " + newY); 
      } 
       catch (Exception e) {} 
      } 

Le code que je l'ai utilisé pour définir les valeurs dans TextField est la suivante: J'ai créé l'objet de classe First et j'appelle la variable newX et newY dans cette classe.

First f = new First(""); 
    Number x = f.newX; //20; 
    Number y = f.newY; //30; 
    int xx = x.intValue(); 
    int yy = y.intValue(); 
    int width = 300; 
    int height = 350; 
    // converting value into string for textfield 

    String x1 = String.valueOf(xx); 
    String y1 = String.valueOf(yy); 
    String w1 = String.valueOf(width); 
    String h1 = String.valueOf(height); 
    Rectangle r = new Rectangle(xx,yy,width,height); 
    jf1.setText(x1); 
    jf2.setText(y1); 
    jf3.setText(w1); 
    jf4.setText(h1); 
+1

Est [ 'JTextField # setText (String)'] (http://docs.oracle.com/javase/7/docs/api/javax/swing/text/JTextComponent.html#setText (java. lang.String)) ce que vous cherchez? Pour une meilleure aide plus tôt poster un [mcve]. Jetez également un coup d'oeil à [Qu'est-ce qu'une 'NullPointerException', et comment puis-je le réparer?] (Http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i- fix-it) – MasterBlaster

+0

JTextField ne met pas à jour les valeurs chaque fois que je clique sur les points. il montre seulement la valeur par défaut qui est définie sur 1 dans mon cas. Je veux que les mises à jour de textfield la valeur sur le clic. –

Répondre

1

Ne pas mettre à jour vos champs de texte, sauf si ce instanceof XYItemEntity est true, comme ils montrent here.

chartPanel.addChartMouseListener(new ChartMouseListener() { 
    public void chartMouseClicked(final ChartMouseEvent event) { 
     ChartEntity ce = cme.getEntity(); 
     XYItemEntity ce = (XYItemEntity) event.getEntity(); 
     if (ce instanceof XYItemEntity) { 
      XYItemEntity e = (XYItemEntity) ce; 
      XYDataset d = e.getDataset(); 
      updateTextFields(e, d); // call your update method 
     } 
    } 
});