package newkecheng;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
public class TestButton extends JFrame implements ActionListener{
private static String str;
JButton jb,jb1;
public TestButton() {
super();
setTitle("按钮测试");
setBounds(100, 100, 320, 200);
setResizable(false);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
str ="";
jb = new JButton("Crazy!");
jb1 = new JButton("输出!");
add(jb, BorderLayout.CENTER);
add(jb1, BorderLayout.SOUTH);
jb.addActionListener(this);
jb1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
System.out.println(str);
}
});
}
class TestNew
{
private String shuchu;
public TestNew(String str) {
shuchu = str;
}
public String getStr() {return shuchu;}
}
public static void main(String[] args) {
TestButton tb = new TestButton() /**{
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
str = str + e.getActionCommand();
System.out.println(str);
}
}
*/;
tb.setVisible(true);
TestNew tn = tb.new TestNew(tb.str);
String strlast = tn.getStr();
System.out.println("new:" + strlast);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
str = str + e.getActionCommand();
System.out.println(str);
}
}
因为这个是在程序启动时,还没有给str赋值,初始化的时候str的是空字符串,所以System.out.println("new:" + strlast);输出始终是空。
java swing是基于事件驱动的,比如这块代码是给button按钮添加监听事件,
jb.addActionListener(this);
jb1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
System.out.println(str);
}
});
jb负责修改str的值,jb1负责将修改的值输出, 其中jb.addActionListener(this);this表示当前执行的对象,当点击时会执行如下代码:
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
str = str + e.getActionCommand();
System.out.println(str);
}
有一种方法可以让外围的变量拿到这个值,将main方法修改如下,但是这样只能取到5秒内操作str的值:
public static void main(String[] args) throws InterruptedException {
TestButton tb = new TestButton() /**{
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
str = str + e.getActionCommand();
System.out.println(str);
}
}
*/;
tb.setVisible(true);
Thread.sleep(5000L);
TestNew tn = tb.new TestNew(tb.str);
String strlast = tn.getStr();
System.out.println("new:" + strlast);
}