所以基本上我开始学习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();
提前致谢。
答案 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();