用MousAdapter处理鼠标事件时,假如一个Buttton添加了一个鼠标事件监听器 moseClicked(),当点击Button时,会创建一个窗口Frame!问题:当我双击时怎么会跳出两个窗口出来,但是我想的时不管怎么点击Button时,只会出来一个Frame,请高手指教一下!!!

解决方案 »

  1.   

    你这个要求太诡异了。楼上说的“e.getClickCount()==1”也不行,楼主的“不管怎么点击”是什么意思?我点一下,隔10秒钟后再点一下?给个我理解的demo:import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.SwingUtilities;public class OnlyOneFrame extends JFrame { private JFrame f = null; public OnlyOneFrame() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JButton button = new JButton("Click me");
    button.setToolTipText("this will show only one frame");
    setTitle("OnlyOneFrame Test");
    getContentPane().add(button); setLocation(300, 200);
    // button.addActionListener(new ActionListener() {
    //
    // @Override
    // public void actionPerformed(ActionEvent e) {
    // showOnlyOneFrame();
    // }
    // });
    button.addMouseListener(new MouseAdapter() {
    public void mouseClicked(MouseEvent e) {
    showOnlyOneFrame();
    }
    });
    pack();
    } private void showOnlyOneFrame() {
    if(f==null){
    f = new JFrame();
    f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    f.setTitle("OnlyOneFrame");
    JLabel label = new JLabel("Hello Boy!");
    f.getContentPane().add(label);
    f.pack();
    f.setLocation(200, 200);
    }
    f.setVisible(true);
    } public static void main(String[] hello) {
    SwingUtilities.invokeLater(new Runnable() { @Override
    public void run() {
    new OnlyOneFrame().setVisible(true);
    }
    });
    }}
      

  2.   

    我的意思时不管是单击还时双击,只弹出一个Frame出来!
      

  3.   

    package com.shan.test;import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;import javax.swing.JButton;
    import javax.swing.JFrame;public class ButtonTest extends JFrame {
    JFrame frame = new JFrame(); ButtonTest() {
    JButton button = new JButton("弹出对话框");
    button.addMouseListener(new MouseAdapter() { @Override
    public void mouseClicked(MouseEvent e) {
    if (!frame.isVisible()) {
    frame.setSize(800,600);
    frame.setVisible(true);
    }
    } });
    this.getContentPane().add(button);
    } public static void main(String[] args) {
    ButtonTest test=new ButtonTest();
    test.setSize(300,400);
    test.setVisible(true);
    }
    }
      

  4.   

    你应该只有一个instance,而不是每次都new一个
    然后在Button事件只是把该instance显示setVisiable(true)
      

  5.   

    你不要在鼠标单击事件里面去new,把窗体对象做成一个类局部变量,一开始就new,然后去判断他的visalbe。和楼上的思路一样的
      

  6.   

    定义一个Boolean值 初始为TRUE 在每次new   frame之前首先判断下如果是FALSE就不new了  第一次new的时候将值设为FALSE 我想这样应该可以了
      

  7.   

    设个标志不就完了,count计数为一时就不再创建frame(可以用if语句进行判断)
      

  8.   

    不要每次都new个实例,操作原有的实例,用单例模式来做吧