【问题标题】:Get a value and print text to a text field获取值并将文本打印到文本字段
【发布时间】:2017-04-22 13:29:57
【问题描述】:

在这个问题中,我希望用户在第一个文本字段中输入一个值 用户应该按计算。 要获取用户输入此行应该做的值。

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

但我有一个错误,

其中说:不能引用封闭范围内定义的非最终局部变量。

然后我想在第二个文本字段中打印 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);
}
  }

【问题讨论】:

  • 对我来说很好用
  • 它对我的医生也很有效,但对我没有效果,直到我添加了 final @YCF_L

标签: java jtextfield


【解决方案1】:

此答案适用于您的第二个问题。如果你想在 year(y textfield) 中打印 y1,你应该像这样尝试。计算后在你的 act actionlistner 中

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

【讨论】:

    【解决方案2】:

    这是因为

    问题是匿名内部类会复制他们使用的本地字段,如果这些字段不是最终的,那么副本可能与原始的不同步,从而导致各种问题。(取自here )

    您有两个选择: 1.在main方法前声明变量如下:

    public class secondsConvert {
    
    JTextField s = new JTextField(10);
    
    public static void main(String[] args)
    {
    }
    }
    
    1. 将变量声明为final:

      public static void main(String[] args)

      {

      final JTextField s = new JTextField(10);

      }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-08
      • 2011-07-10
      相关资源
      最近更新 更多