2017-04-22 2 views
0

bien dans cette question je veux que l'utilisateur à entrer une valeur dans le premier champ de texte l'utilisateur doit appuyer sur calculer. Pour obtenir la valeur que l'utilisateur a entré cette ligne devrait faire.obtenir une valeur et imprimer du texte dans un champ de texte

int j = Integer.parseInt(s.getText()); 

mais j'ai une erreur,

qui dit: Ne peut pas se référer à la variable locale non-finale s définie dans une portée englobante.

alors je veux imprimer y1 dans le deuxième texte Feild mais je ne sais pas comment faire

package ass3; 

import java.awt.FlowLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import java.awt.GridLayout; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JTextField; 
import javax.swing.SwingConstants; 

    public class secondsConvert { 
    public static void main(String[] args) 
    { 
    JFrame.setDefaultLookAndFeelDecorated(true); 

     JFrame frame = new JFrame("second convert program"); 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setLayout(new GridLayout(8,2)); 


     JLabel seconds = new JLabel("Enter seconds",SwingConstants.RIGHT); 
     frame.add(seconds); 

     JTextField s = new JTextField(10); 
     frame.add(s); 


     JLabel year = new JLabel("Years",SwingConstants.RIGHT); 
     frame.add(year); 

     JTextField y = new JTextField(10); 
     frame.add(y); 


     JLabel week = new JLabel("Weeks",SwingConstants.RIGHT); 
     frame.add(week); 

     JTextField w = new JTextField(10); 
     frame.add(w); 


     JLabel day = new JLabel("Days",SwingConstants.RIGHT); 
     frame.add(day); 

     JTextField d = new JTextField(10); 
     frame.add(d); 


     JLabel hours = new JLabel("Hours",SwingConstants.RIGHT); 
     frame.add(hours); 

     JTextField h = new JTextField(10); 
     frame.add(h); 


     JLabel minuts = new JLabel("Minuts",SwingConstants.RIGHT); 
     frame.add(minuts); 

     JTextField m = new JTextField(10); 
     frame.add(m); 


     JLabel un = new JLabel("Seconds",SwingConstants.RIGHT); 
     frame.add(un); 

     JTextField u = new JTextField(10); 
     frame.add(u); 

     JButton b1 = new JButton("OK"); 
     frame.add(b1); 
     JButton b2 = new JButton("Calculate"); 
     frame.add(b2); 


     ActionListener act = new ActionListener() 
      { 
      public void actionPerformed(ActionEvent e) 
      { 
       int j = Integer.parseInt(s.getText()); 

       int y1=j/31536000; 
       int a=j%31536000; 

      } 
     }; 

     b2.addActionListener(act); 

     frame.pack(); 
     frame.setVisible(true); 
} 
    } 
+0

il fonctionne très bien avec moi –

+0

il a bien fonctionné avec mon médecin aussi, mais il n'a pas travaillé avec moi Untel j'ajouter le dernier mot @YCF_L –

Répondre

1

C'est parce que

Le problème est que les classes internes anonymes font des copies des locaux les champs qu'ils utilisent, et si les champs ne sont pas définitifs, alors la copie peut ne pas être synchronisée avec l'original causant toutes sortes de problèmes. (Tiré de here)

Vous avez deux options: 1. déclarer variable avant comme principale méthode comme:

public class secondsConvert { 

JTextField s = new JTextField(10); 

public static void main(String[] args) 
{ 
} 
} 
  1. Déclare variable final:

    public static void main (String [] args)

    {

    final JTextField s = nouveau JTextField (10);

    }

6

cette réponse est à votre deuxième question. Si vous voulez imprimer y1 dans l'année (y textfield) vous devriez essayer comme ceci. l'intérieur de votre acte actionlistner après le calcul

y.setText(Integer.toString(y1));