黑马程序员技术交流社区
标题:
做一个加法GUI窗口出现的问题
[打印本页]
作者:
H._张_♂
时间:
2014-4-11 15:07
标题:
做一个加法GUI窗口出现的问题
本帖最后由 H._张_♂ 于 2014-4-11 17:28 编辑
为什么我得不到正确的加法结果啊,还有,其中button的大小怎么无法设置?按加号根本就不显示,这是为什么啊
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class Testview {
public static void main(String[] args) {
Frame frame ;
Button equal;
TextField t1 ;
TextField t2 ;
TextField t3 ;
Label add;
frame = new Frame();
frame.setLayout(new FlowLayout());
System.out.println(frame.getLayout());
frame.setBounds(0, 0, 400, 50);
equal = new Button();
equal.setSize(100,100);//为什么button这个大小没办法设置
equal.setLabel("=");
equal.addActionListener(new MyListener());
t1 = new TextField("",10);
t2 = new TextField("",10);
t3 = new TextField("",10);
t1.setSize(200, 200);//为什么t1的size没办法设置?
add = new Label("+");
frame.setVisible(true);
frame.add(t1);
frame.add(add);
frame.add(t2);
frame.add(equal);
frame.add(t3);
frame.pack();
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
}
class MyListener implements ActionListener{
TextField t1 ;
TextField t2 ;
TextField t3 ;
public void actionPerformed(ActionEvent e) {
t3.setText(Integer.parseInt(t1.getText())+Integer.parseInt(t2.getText())+"");
}
}
复制代码
作者:
袁啟雄x
时间:
2014-4-11 15:30
我只能告诉你什么原因,还有帮你改了.代码在下面
这是类文件,帮你封装了一下.
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class MyFrame{
private TextField t1 ;
private TextField t2 ;
private TextField t3 ;
private Button equal;
private Label add;
private Frame frame ;
public MyFrame(){
frame = new Frame();
frame.setLayout(new FlowLayout());
frame.setBounds(0, 0, 400, 50);
equal = new Button();
equal.setSize(100,100);
equal.setLabel("=");
equal.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Integer val = Integer.parseInt(t1.getText())+Integer.parseInt(t2.getText());
t3.setText(val.toString());
}
});
t1 = new TextField("",10);
t2 = new TextField("",10);
t3 = new TextField("",10);
t1.setSize(200, 200);
add = new Label("+");
frame.setVisible(true);
frame.add(t1);
frame.add(add);
frame.add(t2);
frame.add(equal);
frame.add(t3);
frame.pack();
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
}
复制代码
这是主文件
public class Testview {
public static void main(String[] args) {
MyFrame my = new MyFrame();
}
}
复制代码
原因是因为你触发事件的代码块
TextField t1 ;
TextField t2 ;
TextField t3 ;
public void actionPerformed(ActionEvent e) {
t3.setText(Integer.parseInt(t1.getText())+Integer.parseInt(t2.getText())+"");
}
复制代码
的这几个文本框跟你在窗口显示的不是同一个.这样说可懂?
在你窗口显示的是你在main新建的.有自己的内存地址.并添加到frame中.
但是在你触发事件代码里面你又写了几个文本框.但是这几个文本框和你frame中的不是同一个地址.所以首先那拿到的是空指针异常,因为你尝试获取没有NEW操作对象的值.好好理解下类,对象,作用域
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2