难题, java swing 里的按钮点击问题 MouseListener,ActionListener 都不能动态改变组件内容。

最近需要写一个小的swing,需要在点击按钮后处理一些逻辑,并把处理结果实时在textArea显示。无法实现,最后发现Button的MouseListener,Actio... 最近需要写一个小的swing,需要在点击按钮后处理一些逻辑,并把处理结果实时在 textArea显示。无法实现,最后发现Button的MouseListener,ActionListener 事件监听并不会实时改变组件内容,它其实是记录改变的内容,在事件结束后才改变组件。
下面是用一个按钮点击事件 改变JLablede的完整代码。请问高手如果能实现动态改变。谢谢~
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class ChangeFrame extends JFrame{
static JLabel jl ;
/**
* @param args
*/
public static void main(String[] args) {
ChangeFrame changeFrame = new ChangeFrame();
changeFrame.setSize(300, 300);
changeFrame.setContentPane(greatPane());
changeFrame.setVisible(true);
}
private static Container greatPane() {
JPanel jp = new JPanel();
jl = new JLabel("00000");
JButton jbu = new JButton("gg");
// jbu.addMouseListener(new MouseListener() {
//@Override
//public void mouseReleased(MouseEvent e) {
//}
//@Override
//public void mousePressed(MouseEvent e) {
//// TODO Auto-generated method stub
//
//}
//
//@Override
//public void mouseExited(MouseEvent e) {
//// TODO Auto-generated method stub
//
//}
//
//@Override
//public void mouseEntered(MouseEvent e) {
//// TODO Auto-generated method stub
//}
//
//@Override
//public void mouseClicked(MouseEvent e) {
//// TODO Auto-generated method stub
//}
//});
jbu.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
th.start();
jl.setText("1111");
try {
Thread.sleep(1000L);
jl.setText("2222");
Thread.sleep(1000L);
} catch (InterruptedException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
}
});
jp.add(jl);
jp.add(jbu);
return jp;
}
static Thread th = new Thread(){
@Override
public void run() {
// TODO Auto-generated method stub
jl.setText("2222");
}};
}
展开
 我来答
完颗伴1
2013-01-24 · 超过12用户采纳过TA的回答
知道答主
回答量:39
采纳率:0%
帮助的人:37.1万
展开全部


应该是线程的问题,在继承Thread类和实现Runnable接口两种方法中,第一种不支持数据共享,

第二种则支持。可能是监听线程和创建的线程共享了数据吧
百度网友75bfa5c
2013-01-22 · TA获得超过154个赞
知道小有建树答主
回答量:137
采纳率:66%
帮助的人:76.3万
展开全部
监听事件不应该放在静态块里吧。还有不用声明实例化Thread类 只调用Thread.sleep();方法就行了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式