2017-04-22 93 views
0

在這個問題中,我希望用戶在第一個文本字段中輸入值 用戶應按計算。 要獲得用戶輸入此行的值應該執行的操作。獲取值並將文本打印到文本字段

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

,但我有一個錯誤,

它說:不能指在一個封閉的範圍定義的非最終局部變量s。

然後我想在第二個文本費爾德 打印Y1,但我不知道該怎麼做

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

它正常工作與我 –

+0

它好工作與我的醫生太多,但它並沒有和我一起untel我加字最後@YCF_L –

回答

1

這是因爲

的問題是,匿名內部類做的本地副本他們使用的字段,如果字段不是最終的,那麼副本可能不會與原來同步導致各種問題。(摘自here

您有兩種選擇:前主要方法1.聲明變量作爲像:

public class secondsConvert { 

JTextField s = new JTextField(10); 

public static void main(String[] args) 
{ 
} 
} 
  • 聲明變量作爲最終:

    公共靜態無效的主要(字串[] args)

    {

    final JTextField s = new JTextField(10);

    }

  • 6

    這個答案是你的第二個問題。如果你想在年份(y textfield)打印y1,你應該嘗試這樣。在計算之後你的行爲actionlistner內

    y.setText(Integer.toString(y1)); 
    
    相關問題