无法从类方法设置标签文本

时间:2017-07-25 07:08:34

标签: java swing user-interface methods awt

所以基本上我开始学习Java的awt和swing库,在编写基本计算器时,我遇到的唯一问题就是当你按下其中一个按钮来执行操作时,结果标签从操作方法无法访问,请注意它首先被实例化,当我从同一个方法完成所有工作时,比如构造函数(实例化标签,获取输入,并生成输出)。

import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
public class GUI extends JFrame {
    JPanel panel=new JPanel();
    double a,b;
public GUI(){
    setTitle("Calculator");
    setVisible(true); //Initializes window frame
    add(panel); //Initializes window panel
    input1();
    input2();
    result();
    addition();
    subtraction();
    multiplication();
    division();





    setSize(400,500);
}
void input1(){ //Sets Input 1 label and input box
    JLabel lInput1=new JLabel("Input 1"); 
    lInput1.setForeground(Color.green);
    panel.add(lInput1);
    JTextField tInput1=new JTextField(4);
    panel.add(tInput1);
    a=Double.parseDouble(tInput1.getText()); //Saves the input on a variable for later usage
}
void input2(){ //Sets Input 2 label and input box
    JLabel lInput2=new JLabel("Input 2"); 
    lInput2.setForeground(Color.green);
    panel.add(lInput2);
    JTextField tInput2=new JTextField(4);
    panel.add(tInput2);
    b=Double.parseDouble(tInput2.getText()); //Saves the input on a variable for later usage
}
void addition(){ //Sets addition button
    JButton addition=new JButton("+");
    panel.add(addition);
        addition.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
            result.setText(String.valueOf(a+b));
            }
        });
}
void subtraction(){ //Sets subtraction button
    JButton subtraction=new JButton("-");
    panel.add(subtraction);
        subtraction.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
            result.setText(String.valueOf(a-b));
            }
        });
}

void multiplication(){ //Sets multiplication button
    JButton multiplication=new JButton("*");
    panel.add(multiplication);
    multiplication.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
        result.setText(String.valueOf(a*b));
        }
    });
}
void division(){ //Sets division button

    JButton division=new JButton("/");
    panel.add(division);
        division.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
            result.setText(String.valueOf(a*b));
            }
        });
}
void result(){
    JLabel result=new JLabel();
    panel.add(result);
}
}

错误出现在具有以下方法的行中:

result.setText();

提前致谢。

1 个答案:

答案 0 :(得分:1)

这是基本的Java 101,花一些时间了解范围在Java中的工作原理可能是值得的。

基本答案是使变量成为类的实例字段......

//...
public class GUI extends JFrame {
    //...
    JLabel result=new JLabel();
    //...
    void result(){
        panel.add(result);
    }    
}

这样整个对象都可以访问它

  

但它表示结果实例只允许final

我发现很难相信它是“必需”的最终版本,在这种情况下它不会受到伤害,但你只是增加了你可能尚未准备好的问题的复杂性。如果要使IDE /编译器警告静音,请务必将其标记为final

final JLabel result=new JLabel();