用MousAdapter处理鼠标事件!!!!!!! 用MousAdapter处理鼠标事件时,假如一个Buttton添加了一个鼠标事件监听器 moseClicked(),当点击Button时,会创建一个窗口Frame!问题:当我双击时怎么会跳出两个窗口出来,但是我想的时不管怎么点击Button时,只会出来一个Frame,请高手指教一下!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你这个要求太诡异了。楼上说的“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); } }); }} 我的意思时不管是单击还时双击,只弹出一个Frame出来! 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); }} 你应该只有一个instance,而不是每次都new一个然后在Button事件只是把该instance显示setVisiable(true) 你不要在鼠标单击事件里面去new,把窗体对象做成一个类局部变量,一开始就new,然后去判断他的visalbe。和楼上的思路一样的 定义一个Boolean值 初始为TRUE 在每次new frame之前首先判断下如果是FALSE就不new了 第一次new的时候将值设为FALSE 我想这样应该可以了 设个标志不就完了,count计数为一时就不再创建frame(可以用if语句进行判断) 不要每次都new个实例,操作原有的实例,用单例模式来做吧 如何用POI读取WORD中的表格,并还原 java的二进制文件操作问题 关于Hashtable中put()方法 请问java如何开发office应用程序 哪位大哥大姐能帮我介绍一下J2se? 请问一个关于list的问题 关于Iterator谁能进来说明一下 怎样用JAVA语言实现对WORD文档的读写操作? 有个数学计算的JAVA代码各位大哥看看帮帮忙 关键字的问题! swing面板加背景的问题 jar 内部文件
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);
}
});
}}
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);
}
}
然后在Button事件只是把该instance显示setVisiable(true)