代码如下:
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在界面上了。]
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在界面上了。]
解决方案 »
- java代码中生成大量的new File()对象,对程序有不好的影响吗?
- 问题在于 1.1 这个数字不能被精确表示成为一个 double
- 要想找最好的知识,最好的服务吗?
- 在Eclipse下配置Tomcat运行时出现的错误,请大家帮帮忙
- 关于回车的小问题,回车的unicode是13还是1013???
- 怎样实现判断同一个串口是否2、3线连通阿?急急急。要做不出来,5.1还得加班阿。
- rmi 的送分题(不知何解)
- JDBC的初级问题?
- javac 时需要考虑到memoryMaximumSize吗?有什么影响吗?memoryMaximumSize设置多少才是正常呢?
- 以下代码在JBuilder5可以正常运行,可是在ie却显示不出,不知是怎么回事?
- 吐血急求啊~~求一本书
- 高分 急求!!!!
注:更改可见 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
要想生效还是要
setVisible(false);
setVisible(true);
@Deprecated
public void show() {
beforeFirstShow = false;
if (!isModal()) {
conditionalShow(null, null);
} else {
……
}
从上面的方法可以看出,在对话框显示的时候,需要先知道当前的对话框是不是模态滴,
然后才会去显示,对于模态和非模态的对话框使用的显示方法是不一样的。 所以在对话框已经显示了之后再把它设置成是模态的,应该是不行的。
这样会产生一个两种状态都不像的对话框。
晕死~~~不过你的这样的要求真是太奇特了。