当前位置:编程学习 > JAVA >>

GUI当中的事件监听问题,大神帮忙看看呀!!!

大家帮忙看一下,为什么输出错误路径后,弹出dialog对话框,对话框关不掉呢?

package cn.test;

 import java.awt.Button;
 import java.awt.Dialog;
 import java.awt.FlowLayout;
 import java.awt.Frame;
 import java.awt.Label;
 import java.awt.TextArea;
 import java.awt.TextField;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.awt.event.KeyAdapter;
 import java.awt.event.KeyEvent;
 import java.awt.event.WindowAdapter;
 import java.awt.event.WindowEvent;
 import java.io.File;

 // 为什么事件写在showDialog()方法的
//else里面去点那个提示窗体的按钮和关闭按钮会没有效果,
//而这两个事件丢在myEvent() 这个方法里就有效果

public class LianXiDemo {

         /**
          * @param args
          */
         // 构造函数
        public LianXiDemo() {
                 init();
         }

         private Frame fr;
         private Button b;
         private TextField t;
         private TextArea ta;
         private Dialog d = new Dialog(fr, "提示框", true);
         private Button bok = new Button("确定");

         // 初始化图形界面
        public void init() {
                 // 初始化窗体
                fr = new Frame("我的图形化界面");
                 // 设置窗体坐标,宽高
                fr.setBounds(200, 300, 500, 400);
                 // 设置布局样式
                fr.setLayout(new FlowLayout());
                 t = new TextField(30);
                 fr.add(t);
                 b = new Button("转到");
                 fr.add(b);
                 ta = new TextArea(10, 50);
                 fr.add(ta);
                 // 设置窗体可见性
                fr.setVisible(true);
                 // 加載窗體事件
                myEvent();
               
           
         }

         // 响应的对应事件
        private void myEvent() {
                 fr.addWindowListener(new WindowAdapter() {
                         // 窗体关闭按钮响应事件
                        public void windowClosing(WindowEvent e) {
                                 System.exit(0);
                         }
                 });
                 //单行文本按enter响应事件
                t.addKeyListener(new KeyAdapter(){
                         public void keyPressed(KeyEvent e){
                                 if(e.getKeyCode()==e.VK_ENTER){
                                         showDialog();
                                 }
                         }
                 });
                 // 点击转到按钮响应事件
                b.addActionListener(new ActionListener() {
                         public void actionPerformed(ActionEvent e) {
                                 showDialog();
                         }

                 });
         }
         //触发事件弹出提示框共用方法
        private void showDialog(){
                 ta.setText("");
                 String name = t.getText();
                 File f = new File(name);
                 if (f.exists()&& f.isDirectory()) {
                         for (String str : f.list()) {
                                 ta.append(str + "\r\n");
                         }
                 } else {
                         // 路径不存在,弹出提示框
                        d = new Dialog(fr, "提示框", true);
                         Label la = new Label();
                         d.setBounds(200, 300, 200, 100);
                         d.setLayout(new FlowLayout());
                         la.setText(null);
                         la.setText("您好,你填写的路径:" + name + "不存在,请重写填写");
                         d.add(la);
                         d.add(bok);
                         d.setVisible(true);
                         
                         /**   为什么我把这两个事件写在else里面去点那个提示窗体的按钮和关闭按钮会没有效果,而这两个事件丢在myEvent() 这个方法里就有效果 */
                   
                         // 点击模式窗口确定按钮响应事件
                        bok.addActionListener(new ActionListener() {
                                 public void actionPerformed(ActionEvent e) {
                                         d.setVisible(false);
                                 }
                         });
                         // 点击模式窗口关闭按钮响应事件
                        d.addWindowListener(new WindowAdapter(){
                                 public void windowClosing(WindowEvent e){
                                         d.setVisible(false);
                                 }
                         });
                        
                 }
         }
         

         public static void main(String[] args) {
                 // TODO Auto-generated method stub
                 new LianXiDemo();
         }

 }
--------------------编程问答--------------------

//不应该是window事件把,window是主窗体关闭时间,你给dialog添加上肯定就管不了了。
d.addWindowListener(new WindowAdapter(){
     public void windowClosing(WindowEvent e){
           d.setVisible(false);
     }
});

--------------------编程问答-------------------- --------------------编程问答--------------------
引用 2 楼 a1216164960 的回复:
你的头像是恶意卖萌吗?哈哈,你常在啊 --------------------编程问答--------------------
引用 1 楼 peng_hao1988 的回复:

//不应该是window事件把,window是主窗体关闭时间,你给dialog添加上肯定就管不了了。
d.addWindowListener(new WindowAdapter(){
     public void windowClosing(WindowEvent e){
           d.setVisible(false);
     }
});


这个是用来监听dialog对话框的窗体。
而且,我试了如果将d.setVisible(true);放在dialog的两个事件监听后就可以关闭了。。求解释呀 --------------------编程问答-------------------- 监听不对吧  setvisible(false)好像不是关闭对话框吧 也是新手,求大神赐教啊 --------------------编程问答--------------------
引用 5 楼 m112255 的回复:
监听不对吧  setvisible(false)好像不是关闭对话框吧 也是新手,求大神赐教啊

这句是将dialog对话框设置为不可见,其实如果程序不结束,这个对话框是一直存在的。 --------------------编程问答--------------------
引用 3 楼 confirmAname 的回复:
Quote: 引用 2 楼 a1216164960 的回复:

你的头像是恶意卖萌吗?哈哈,你常在啊
额好吧,算是 --------------------编程问答-------------------- 楼主应该在讲按钮添加到dialog之前,设置时间监听即
d = new Dialog(fr, "提示框", true);
               
                        Label la = new Label();
                        d.setBounds(200, 300, 200, 100);
                        d.setLayout(new FlowLayout());
                        la.setText(null);
                        la.setText("您好,你填写的路径:" + name + "不存在,请重写填写");
                        // 点击模式窗口确定按钮响应事件
                        bok.addActionListener(new ActionListener() {
                                    @Override
                                 public void actionPerformed(ActionEvent e) {
                                     System.out.println("hello");
                                     //d.dispose();
                                        d.setVisible(false);
                                }
                        });
                        // 点击模式窗口关闭按钮响应事件
                       d.addWindowListener(new WindowAdapter(){
                                public void windowClosing(WindowEvent e){
                                        d.setVisible(false);
                                        //d.dispose();
                                }
                        });
                       d.add(la);
                       d.add(bok);
                       d.setVisible(true);
--------------------编程问答--------------------
引用 8 楼 a1216164960 的回复:
楼主应该在讲按钮添加到dialog之前,设置时间监听即
d = new Dialog(fr, "提示框", true);
               
                        Label la = new Label();
                        d.setBounds(200, 300, 200, 100);
                        d.setLayout(new FlowLayout());
                        la.setText(null);
                        la.setText("您好,你填写的路径:" + name + "不存在,请重写填写");
                        // 点击模式窗口确定按钮响应事件
                        bok.addActionListener(new ActionListener() {
                                    @Override
                                 public void actionPerformed(ActionEvent e) {
                                     System.out.println("hello");
                                     //d.dispose();
                                        d.setVisible(false);
                                }
                        });
                        // 点击模式窗口关闭按钮响应事件
                       d.addWindowListener(new WindowAdapter(){
                                public void windowClosing(WindowEvent e){
                                        d.setVisible(false);
                                        //d.dispose();
                                }
                        });
                       d.add(la);
                       d.add(bok);
                       d.setVisible(true);
将按钮添加到dialog上之前添加事件监听。。。错别字原谅我啊
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,