JDialog的简单问题

chenyuelin311 2007-09-02 11:56:39
代码如下:
public class Help extends JFrame {
Help(){
setSize(400, 300);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JDialog d=new JDialog(this);
d.setSize(320, 240);
d.setVisible(true);
d.setModal(true);
}

public static void main(String[] args) {
new Help();
}
}
为什么我把JDialog用setModal(true)设置成有模式窗口时界面上还是无模式窗口,非要在setModal之后加上d.setVisible(false);d.setVisible(true);两句话才行,而且画面会闪烁下。
请问有什么方法可以在setModal(true)之后不用d.setVisible(false);d.setVisible(true);就能把窗口设为模式窗口。
[由于种种原因,我不能在构造涵数中设置,初始时无模式的JDialog就show在界面上了。]
...全文
531 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenyuelin311 2007-09-08
  • 打赏
  • 举报
回复
楼上三位都得都不对,你们自己也不试试,真晕。
tony_zhou820602 2007-09-07
  • 打赏
  • 举报
回复
updateUI()
beibeiG 2007-09-03
  • 打赏
  • 举报
回复
validate()
repaint()
gksgks 2007-09-02
  • 打赏
  • 举报
回复
老大你就不能把它刷新一下吗?validate()用这个方法就可以了
daimojingdeyu 2007-09-02
  • 打赏
  • 举报
回复
看一下Dialog的Show方法就知道了。
  @Deprecated
public void show() {
beforeFirstShow = false;
if (!isModal()) {
conditionalShow(null, null);
} else {
……
  }
  从上面的方法可以看出,在对话框显示的时候,需要先知道当前的对话框是不是模态滴,
  然后才会去显示,对于模态和非模态的对话框使用的显示方法是不一样的。

  所以在对话框已经显示了之后再把它设置成是模态的,应该是不行的。
  这样会产生一个两种状态都不像的对话框。
  
  晕死~~~不过你的这样的要求真是太奇特了。
zephyr_cc 2007-09-02
  • 打赏
  • 举报
回复
setModalityType也解决不了你的问题,只不过是替代了setModal
要想生效还是要
setVisible(false);
setVisible(true);
chenyuelin311 2007-09-02
  • 打赏
  • 举报
回复
jdk5.0好像没有setModalityType这个方法啊,晕真。
zephyr_cc 2007-09-02
  • 打赏
  • 举报
回复
API中说:
注:更改可见 dialog 的模式只在隐藏该 dialog 并再次显示它时产生效果。
所以只能用楼主说的那种方法.

但是如果楼主想要的是视觉效果的话可以这样:
再创建一个一模一样的对话框...然后在刚才那个对话框setVisible(false)之前显示出来.

然后加一个addMouseMotionListener
在mouseMoved中把那个假的对话框关掉...

参考一下
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Help extends JFrame {
Help(){
setSize(400, 300);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JDialog d = new JDialog(this);
final JDialog d1 = new JDialog(this);
d1.setSize(320, 240);
d.setSize(320, 240);
d.setVisible(true);
d.setModal(true);
d1.setVisible(true);
d.addMouseMotionListener(new MouseMotionListener() {
public void mouseDragged(MouseEvent event) {}
public void mouseMoved(MouseEvent event) {
d1.setVisible(false);
d1.dispose();
}
});
d.setVisible(false);
d.setVisible(true);
}

public static void main(String[] args) {
new Help();
}
}

另外我看API上说让用setModalityType这个方法替代setModal
chenyuelin311 2007-09-02
  • 打赏
  • 举报
回复
这个我知道,但这个由于特殊原因,JDialog已经显示了,上面的程序只是个能说明我问题的简单例子,并不是我要解决的实际问题。
pigwen521 2007-09-02
  • 打赏
  • 举报
回复
在界面设计中,在构造方法中要把d.setVisible(true);这代码放在最后一句

62,623

社区成员

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

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