A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吴通 中级黑马   /  2012-9-14 21:27  /  1493 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 吴通 于 2012-9-15 09:30 编辑

import java.awt.*;
import java.awt.event.*;
import java.io.*;
class DuiHuaKuangDemo
{
private Frame f;
private TextField tf;
private Button but;
private TextArea ta;  //文本区域
private Dialog d;
private Label lab;
private Button okbut;
DuiHuaKuangDemo()
{
  init();
}
public void init()
{
  f=new Frame("my window");
  f.setBounds(300,200,600,500);
  f.setLayout(new FlowLayout());
  tf=new TextField(70);
  but=new Button("转到");
  ta=new TextArea(25,70); //行 列
  d=new Dialog(f,"提示信息-self",true); //设为true时,对话框必须关闭才能操作窗体,为false,则可以
  d.setBounds(400,200,240,150);
  d.setLayout(new FlowLayout());
  lab=new Label();
  okbut=new Button("确定");
  d.add(okbut);
  f.add(tf);
  f.add(but);
  f.add(ta);
  myEvent();
  f.setVisible(true);
}
private void myEvent()
{
  okbut.addActionListener(new ActionListener()
  {
   public void actionPerformed(ActionEvent e)
   {
    d.setVisible(false);
   }
  });
  //增加对话框监听器
  d.addWindowListener(new WindowAdapter()
  {
   public void windowClosing(WindowEvent e)
   {
    d.setVisible(false);
   }
  });
  but.addActionListener(new ActionListener()
  {
   public void actionPerformed(ActionEvent e)
   {
    showDir();
   }
  });
  //如果想要在文本框中输入完之后,回车直接查找的话
  //首先要在对话框添加键盘监听
  tf.addKeyListener(new KeyAdapter()
  {
   public void keyPressed(KeyEvent e)
   {
    if(e.getKeyCode()==KeyEvent.VK_ENTER);
     showDir();
   }
  });
  f.addWindowListener(new WindowAdapter()
  {
   public void windowClosing(WindowEvent e)
   {
    System.exit(0);
   }
  });
}

//把显示目录的功能封装
private void showDir()
{
  //在文本框中输入盘符,列出盘下面的文件
   String text=tf.getText();
   //先把输入的字
   File dir=new File(text);
   if(dir.exists()&&dir.isDirectory())
   {
    ta.setText("");
    String[] names=dir.list();
    for(String name:names)
    {
     ta.append(name+"\r\n");
    }
   }
   else
   {
    String info="您输入的信息:"+text+"是错误的,请重新输入";
    lab.setText(info); //增加标签文本
    d.setVisible(true);
   }
}
public static void main(String[] args)
{
  DuiHuaKuangDemo dhk=new DuiHuaKuangDemo();
}
}

创建一个窗体,里面有文本框和文本区域,在文本框中输入盘符,列出该盘下面的文件
在文本框输入之后按下回车显示目录下文件,如果路径不存在,则弹出对话框
但是上面的代码执行完之后怎么在文本框里面能输入就会弹出对话框,怎么回事?

如果我想在弹出对话框之后按下回车就能隐藏对话框,应该怎么修改代码?

1 个回复

倒序浏览
经过我仔细的通读代码,终于让我找到了错误所在,还真不容易啊
其实就是个小问题,版主一不小心多点了个分号,但是这种小问题很纠结啊

错误所在:

tf.addKeyListener(new KeyAdapter()
  {
   public void keyPressed(KeyEvent e)
   {
    if(e.getKeyCode()==KeyEvent.VK_ENTER);
     showDir();
   }
  });

版主给文本框创建键盘监听的时候,在if后头多加了分号  " ; "
因为这个分号,导致了,当光标在文本框内时,只要你每点击一下键盘中任意一个按钮,都会调用showDir()方法
然后就是判断
if(dir.exists()&&dir.isDirectory())
你输入的是否存在,是否是文件夹
很明显最多只有一个字符,不可能是盘符,也不可能是绝对路径
所以只能运行else方法
else
   {
    String info="您输入的信息:"+text+"是错误的,请重新输入";
    lab.setText(info); //增加标签文本
    d.setVisible(true);
   }
这时候,提示框 d 的属性就变为 true 了,就弹出了提示框
就是这个小问题,有时候真的很头疼

如果你想要在弹出提示框后,按一下回车就能关闭提示框
那就在myEvent()方法中
创建一个确定按钮okbut的键盘监听,
就像这样
okbut.addKeyListener(new KeyAdapter()
  {
    public void keyPressed(KeyEvent e)
   {
     if(e.getKeyCode()==KeyEvent.VK_ENTER)
      d.setVisible(false);
    }
   });
这个键盘监听表示,当你键盘输入的是回车时,提示框的属性变为false ,就是将提示框隐藏

还有,我发现你没有把lab添加到提示框中,所以当提示框弹出的时候,上面没有显示信息,只有一个按钮
在整个程序中,你定义一个Label lab 完全就没有意义了
所以你在前面应该将lab添加到提示框中
d.add(lab);

评分

参与人数 1技术分 +1 收起 理由
田建 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马