如何从另一个类访问java字段值



我想下面提到的错误属于在另一个类中访问变量时的变量范围。我将感谢你的帮助解决这个问题。

class Main {
public static void main(String[] args) {
JFrame frame = new CurrencyConversionFrame();
} 
}
public class CurrencyConversionFrame extends JFrame {
private JTextField currencyAmountField;
private JButton createConvertButton() {
JButton button = new JButton("Convert");
ActionListener listener = new ConvertListener();
button.addActionListener(listener);
return button;
}
}
class ConvertListener implements ActionListener {
public void actionPerformed(ActionEvent action) {
double balance = 0;
try {
balance = Double.parseDouble(currencyAmountField.getText());
}
}
}

上面提供的代码包含原始冗长代码的片段。我有三节课"ConvertListener"CurrencyConversionFrame";以及一个主要类";Main";。当我运行代码时,我只得到以下所有在"中声明的变量的错误;CurrencyConversionFrame";班

ConvertListener.java:9: error: cannot find symbol
balance = Double.parseDouble(currencyAmountField.getText());
^
symbol:   variable currencyAmountField
location: class ConvertListener

为了访问类字段(通常(,您应该声明getter和setter,因此在您的情况下,它将是

public void setCurrencyAmountField(JTextField currencyAmountField) {
this.currencyAmountField = currencyAmountField;
}
public JTextField getCurrencyAmountField() {
return this.currencyAmountField;
}

这种访问变量的方式可以通过getCurrencyMountField((;

还有一件可能有帮助的事情是将ActionListener直接实现到框架中,并通过switch语句确定实际执行了什么类型的操作(如果框架有多种可能性(

public class CurrencyConversionFrame extends JFrame implements ActionListener {

...

public void actionPerformed(ActionEvent action) {
switch(action.getActionCommand()) {
case "Name Of the button":
balance = Double.parseDouble(currencyAmountField.getText());
break;
default:
System.out.println("The action is not yet defined");
}
}
}

事件源项是通过ActionEvent#getSource方法访问的,您不需要访问原始字段:

class ConvertListener implements ActionListener {
public void actionPerformed(ActionEvent action) {
double balance = 0;
try {
Object source = action.getSource(); // here you have the source button and you can deal with its content
}
}
}

当在Swing/JavaFX世界中处理UI组件时,事件侦听器被封装在其依赖组件中(因为它们通常与后者绑定(,因此它们可以访问outer类型字段。

如果您仍然需要直接访问底层字段,这是不鼓励的,那么您可以将ConvertListener移动为内部类型或UI组件。

最新更新