将JDialog设为modal之后,不能改变JDialog上的JLabel的Text。困扰我好几天了,一直找不到解决方法

mahaixing 2005-03-10 12:25:19
例程如下:
import javax.swing.*;

public class TestMontior {

private JDialog dialog;
private ProgressMonitor m;
private JLabel text;

public TestMontior(JFrame parent) {
dialog = new JDialog(parent);

text = new JLabel("text");
dialog.add(text);
dialog.setModal(true);
dialog.setSize(400, 300);
dialog.setVisible(true);
}

public void setText(String value) {
text.setText(value);
}

public static void main(String args[]) {
TestMontior progress = new TestMontior(new JFrame());
progress.setText("new text");
}
}

如果dialog为无模式对话框则可以改变JLabel的text,请问一下这是什么原因?有什么解决方法?
...全文
227 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hpy121 2005-03-10
  • 打赏
  • 举报
回复
import javax.swing.*;

public class TestMontior {

private JDialog dialog;
private ProgressMonitor m;
private JLabel text;

public TestMontior(JFrame parent) {
dialog = new JDialog(parent);

text = new JLabel("text");
dialog.getContentPane().add(text);//注意!
dialog.setModal(true);
dialog.setSize(400, 300);
dialog.setVisible(true);
}

public void setText(String value) {
text.setText(value);
}

public static void main(String args[]) {
TestMontior progress = new TestMontior(new JFrame());
progress.setText("new text");
}
}

更新时
dialog.invalidate();
dialog.validate();
即可!
mahaixing 2005-03-10
  • 打赏
  • 举报
回复
谢谢 kingfish(八百里秦川@龙城异客) 的回答

估计是需要使用线程来更新JLabel的Text,我做的测试中发现如果使用我的那个例子程序
这样做会更新JLabel的Text
dialog.setVisible(false);
dialog.setVisible(ture);

或者在关闭的时候(先给JLabel注册一个PropertyChangeListener在里面把PropertyChangeEvent的newValue打印出来),就可以看到更改后的Text。

等会用kingfish(八百里秦川@龙城异客)再试试看
kingfish 2005-03-10
  • 打赏
  • 举报
回复
Modal窗口就是这种意思, 否则和non-Modal有什么区别

如果需要改,可以另外启一个线程进行
如:
public TestMonitor(JFrame parent) {
dialog = new JDialog(parent);

text = new JLabel("text");
dialog.add(text);
dialog.setModal(true);
dialog.setSize(400, 300);

new Thread(new Runnable() {
public void run() {
int i = 0;
while (i < 100) {
if (dialog.isVisible()) {
setText("" + i++);
}
try {
Thread.sleep(100);
}
catch (Exception e) {}
}
}
}).start();

dialog.setVisible(true);
}
congbailing_914 2005-03-10
  • 打赏
  • 举报
回复
顶!
学习!
mahaixing 2005-03-10
  • 打赏
  • 举报
回复
可是这是为什么呢?
我现在的目的是做一个类似于ProgressMonitor的控件,需要这样更新JLabel。
请问有什么比较好的解决方法?
kingfish 2005-03-10
  • 打赏
  • 举报
回复
关闭Modal后才会执行progress.setText("new text");

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧