免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2544 | 回复: 5
打印 上一主题 下一主题

一个关于JDialog的问题! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-09-28 10:25 |只看该作者 |倒序浏览
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Text{
        private JFrame jf1,jf2;
        private JButton b1,b2;
        private JTextArea jta1,jta2;
        private JDialog jd;
        private JScrollPane jsp1,jsp2;
        public Text(){
                jf1=new JFrame("Text";
                jf2=new JFrame("Frame";
                b1=new JButton("Frame";
                b2=new JButton("Dialog";
                jta1=new JTextArea(20,15);
                jta2=new JTextArea(20,15);
                jta1.setEditable(false);
                jta2.setEditable(false);
                jsp1=new JScrollPane(jta1);
                jsp2=new JScrollPane(jta2);
                jd=new JDialog(jf1,"Dialog",true);
        }
       
        public void creatFrame(){
                jf1.getContentPane().setLayout(new GridLayout(1,2));
                jf1.getContentPane().add(b1);
                jf1.getContentPane().add(b2);
               
                b1.addMouseListener(new MouseAdapter(){
                        public void mouseReleased(MouseEvent e){
                                echoFrame();
                                jta1.setText(jta1.getText()+"Hello Frame!";
                        }
                });
               
                b2.addMouseListener(new MouseAdapter(){
                        public void mouseReleased(MouseEvent e){
                                jta2.setText(jta2.getText()+"Hello Dialog!";
                                echoDialog();
                               
                        }
                });
               
                jf1.setSize(150,200);
                jf1.setVisible(true);
                jf1.pack();
        }
       
        public void echoFrame(){
                jf2.getContentPane().add(jsp1);
                               
                jf2.addWindowListener(new WindowAdapter(){
                        public void windowClosing(WindowEvent e){
                                jta1.setText("";
                                jf2.dispose();
                        }
                });
               
                jf2.setSize(90,90);
                jf2.setVisible(true);
                jf2.pack();
        }
       
        public void echoDialog(){
                jd.getContentPane().add(jsp2);
               
                jd.addWindowListener(new WindowAdapter(){
                        public void windownClosing(WindowEvent e){
                                jta2.setText("";
                                jd.dispose();
                        }
                });
               
                jd.setSize(150,90);
                jd.setVisible(true);
                jd.pack();
        }
       
        public static void main(String args[]){
                Text t=new Text();
                t.creatFrame();
        }
}




当按Frame按钮的时候,产生一个JFrame 里面的有一句话“Hello Frame!”
关闭这个JFrame后再按这个按钮依然是这样的情况
但是当你按Dialog按钮的时候 问题出现了,第一次产生一个JDialog里面有一句话“Hello Dialog!”但是当你关闭这个Dialog后再看里面就是“Hello Dialog!Hello Dialog!”两句话了,但是我在程序里已经写明了关闭Dialog时将那个TextArea设置为空啊!而且在设置Dialog里的TextArea必须要setText,然后再产生窗口,不象Frame那样,顺序无所谓,请高手解释一下原因!

论坛徽章:
0
2 [报告]
发表于 2004-09-28 11:10 |只看该作者

一个关于JDialog的问题!

public void echoDialog(){
jd.getContentPane().add(jsp2);

jd.addWindowListener(new WindowAdapter(){
public void windownClosing(WindowEvent e){
jta2.setText("";
jd.dispose();
}

你没发现这里拼写错误了么?

论坛徽章:
0
3 [报告]
发表于 2004-09-28 14:26 |只看该作者

一个关于JDialog的问题!

这个地方是写错了!呵呵!~
不过
b2.addMouseListener(new MouseAdapter(){
public void mouseReleased(MouseEvent e){
jta2.setText(jta2.getText()+"Hello Dialog!";
echoDialog();

为什么Dialog一定要先 setText然后在显示窗口,但是Frame就可以先显示窗口再 setText

论坛徽章:
0
4 [报告]
发表于 2004-09-29 16:01 |只看该作者

一个关于JDialog的问题!

jd=new JDialog(jf1,"Dialog",true);
把true改成false就可以了。

论坛徽章:
0
5 [报告]
发表于 2004-09-29 16:15 |只看该作者

一个关于JDialog的问题!

问题出在setVisible()这个方法上。通常这个方法上是调用show(boolean)方法,然后调用show()或是hide()

这样你的
jd.setVisible(true);

实际上调用了Dialog.show()这个方法(因为JDialog直接继承从Dialog了这个方法,没有覆盖它)。这样如果是一个modal dialog的话,那么Dialog.show()的javadoc说得很清楚,一直到dialog被关闭,这个show()方法都不会返回,这样你的echoDialog()方法也一直不会返回,自然也就没有调用setText()了。
解决的方法就是把jd的modal属性去掉。也就是在构造的时候,第三个参数设置成false。

论坛徽章:
0
6 [报告]
发表于 2004-09-30 08:43 |只看该作者

一个关于JDialog的问题!

OK!!明白了!!高人就是厉害!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP