Java 从另一个类设置JTextField
我在设置另一个类的JTextField时遇到问题。当我按下按钮“=”时,它应该在AddNumbers类中进行计算,并将JTextField设置为计算结果。但目前它正在抛出NullPointerException。我不知道如何设置JTextField。由于责任链设计,我必须将其设置在AddNumber中Java 从另一个类设置JTextField,java,Java,我在设置另一个类的JTextField时遇到问题。当我按下按钮“=”时,它应该在AddNumbers类中进行计算,并将JTextField设置为计算结果。但目前它正在抛出NullPointerException。我不知道如何设置JTextField。由于责任链设计,我必须将其设置在AddNumber中 public class AddNumbers implements Chain { private Chain nextInChain; public CalcGui calcgui; int
public class AddNumbers implements Chain {
private Chain nextInChain;
public CalcGui calcgui;
int result=0;
@Override
public void setNextChain(Chain nextChain) {
// TODO Auto-generated method stub
this.nextInChain=nextChain;
}
@Override
public void calculate(Numbers request) {
// TODO Auto-generated method stub
if(request.GetCalcWanted()=="add") {
result = request.GetNumber1()+ request.GetNumber2();
this.calcgui.txtWynik.setText(String.valueOf(result)); //NULLPOINTER
}else {
nextInChain.calculate(request);
}
}
这是CalcGui类
public class CalcGui {
private JFrame frame;
JTextField txtWynik;
static Numbers request;
int x,y;
String operation;
boolean clicked = false;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
CalcGui window = new CalcGui();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public CalcGui() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 270, 361);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
txtWynik =new JTextField();
Chain chainCalc1=new AddNumbers();
JButton btneq = new JButton("=");
btneq.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
request = new Numbers(x,y,operation);
chainCalc1.calculate(request);
}
});
我给你一个想法,这个方法:
public void calculate(Numbers request) {
可以接收对JTextField的引用,如下所示:
public void calculate(Numbers request,JTextField out) {
if(request.GetCalcWanted().equals("add")) {
result = request.GetNumber1()+ request.GetNumber2();
out.setText(String.valueOf(result)); //NO NULLPOINTER SINCE YOU PASS PARAMETER
}else {
nextInChain.calculate(request);
}
}
我认为这可以解决你的NPE问题
干杯
-Rod我知道它与JTextField或CalcGui有问题,可能需要以某种方式传递引用?但是我不知道怎么做。你有几个问题:(1)你用
=
而不是.equals
进行字符串比较。(2) String operation
的值从未设置过,因此它为空-出于同样的原因,您的x
和y
始终为0。(3) 您从未初始化过this.calcgui,因此它也是空的。(4) 您在CalcGui
和AddNumbers
之间存在循环依赖关系-虽然不一定是问题,但很可能是造成您混淆和问题的关键原因我正在程序中设置操作x,y,但我没有发布这部分代码。我只是发布了必要的片段,因为其中有很多。calculate
需要返回操作结果,可以直接作为return
值,也可以通过Numbers
classOk间接返回,然后请单击按钮,然后我可以回答您的问题,我这样做是为了回答你的问题。谢谢,祝你过得愉快。我很乐意这样做,但声誉低于15的用户的投票不会改变公开显示的帖子分数。if(request.GetCalcWanted()=“add”){
?你真的建议进行这种平等性检查吗?if(request.GetCalcWanted()=“add”){
对不起,什么?!不,我不会将文本字段传递给方法。更新组件不是方法的责任,它超出了其责任范围。“更好”的解决方案是返回计算结果