import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JWindow;public class Main { public Main() {
} static public class PopupListener extends MouseAdapter {
JPopupMenu menu; public PopupListener(JPopupMenu menu) {
this.menu = menu;
} public void mousePressed(MouseEvent e) {
showPopup(e);
} public void mouseReleased(MouseEvent e) {
showPopup(e);
} private void showPopup(MouseEvent e) {
if (e.isPopupTrigger()) {
menu.show(e.getComponent(), e.getX(), e.getY()); System.out.println("Showing menu at "
+ menu.getLocationOnScreen() + " isVisible: "
+ menu.isVisible() + " isValid: " + menu.isValid());
}
}
}
public static void main(String[] args) {
JWindow window = new JWindow();
window.setBounds(10, 10, 100, 100); JPopupMenu popupMenu = new JPopupMenu();
JMenuItem quit = new JMenuItem("Quit");
quit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
popupMenu.add(quit); window.addMouseListener(new PopupListener(popupMenu));
window.setFocusable(true); window.validate();
window.setVisible(true);
}}上面是例子,运行后会发现,在那个JWindow上点击右键会出现"quit"的弹出菜单,在JWindow上点击左键弹出菜单会消失.....这没有问题.....问题是,将鼠标移到jwindow之外的区域点击,弹出菜单不会消失.............求解决办法.....................
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JWindow;public class Main { public Main() {
} static public class PopupListener extends MouseAdapter {
JPopupMenu menu; public PopupListener(JPopupMenu menu) {
this.menu = menu;
} public void mousePressed(MouseEvent e) {
showPopup(e);
} public void mouseReleased(MouseEvent e) {
showPopup(e);
} private void showPopup(MouseEvent e) {
if (e.isPopupTrigger()) {
menu.show(e.getComponent(), e.getX(), e.getY()); System.out.println("Showing menu at "
+ menu.getLocationOnScreen() + " isVisible: "
+ menu.isVisible() + " isValid: " + menu.isValid());
}
}
}
public static void main(String[] args) {
JWindow window = new JWindow();
window.setBounds(10, 10, 100, 100); JPopupMenu popupMenu = new JPopupMenu();
JMenuItem quit = new JMenuItem("Quit");
quit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
popupMenu.add(quit); window.addMouseListener(new PopupListener(popupMenu));
window.setFocusable(true); window.validate();
window.setVisible(true);
}}上面是例子,运行后会发现,在那个JWindow上点击右键会出现"quit"的弹出菜单,在JWindow上点击左键弹出菜单会消失.....这没有问题.....问题是,将鼠标移到jwindow之外的区域点击,弹出菜单不会消失.............求解决办法.....................
解决方案 »
- 如何用java语句创建Microsoft Loopback Adapter
- 如何增长项目经验?
- 作业
- 奇怪的问题:type dismatch, can not convert date to date
- 为什么抽象方法没有实现, 为什么可以调用的,而且能够实现其应有的功能?
- 学习java在windows还是在linux下好
- 怎样取得当前文件所在的路径?
- 一个简单程序的问题:)关于System.in.read
- 在java中如何把提交的SQL的结果显示在window上
- 如何使用jar?
- 求字符串只能包含,字母,数字,下划线的正则表达式?
- 在JFreeChart的柱状图中单个柱状图的背景色如何设置???急!!!
通常一个JWindow对象不会单独存在,它的用法,你也不要当作一个普通的窗体来用。而且,有些情况下是必须指定其所有者的。请参考如下代码,你会发现Jwindow我添加了一个JTextField,是否可以编辑,什么时候可编辑,自己体会
package test;import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JTextField;
import javax.swing.JWindow;public class Main { public Main() {
} static public class PopupListener extends MouseAdapter {
JPopupMenu menu; public PopupListener(JPopupMenu menu) {
this.menu = menu;
} public void mousePressed(MouseEvent e) {
showPopup(e);
} public void mouseReleased(MouseEvent e) {
showPopup(e);
} private void showPopup(MouseEvent e) {
if (e.isPopupTrigger()) { menu.show(e.getComponent(), e.getX(), e.getY()); System.out.println("Showing menu at "
+ menu.getLocationOnScreen() + " isVisible: "
+ menu.isVisible() + " isValid: " + menu.isValid());
}
}
} public static void main(String[] args) {
final JFrame f = new JFrame(); JButton btn = new JButton("show window");
f.getContentPane().add(btn, BorderLayout.SOUTH);
f.getContentPane().add(new JTextField());
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// 这里尝试一下如果换为new JWindow会发生什么
JWindow window = new JWindow();
// window.setBounds(10, 10, 100, 100);
window.getContentPane().add(new JTextField(30),
BorderLayout.NORTH);
window.getContentPane().setBackground(Color.cyan);
window.setSize(300, 100);
window.setLocationRelativeTo(null); final JPopupMenu popupMenu = new JPopupMenu();
JMenuItem quit = new JMenuItem("Quit");
quit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
popupMenu.add(quit); window.addMouseListener(new PopupListener(popupMenu));
window.addWindowFocusListener(new WindowAdapter() {
@Override
public void windowGainedFocus(WindowEvent e) {
// TODO Auto-generated method stub
super.windowGainedFocus(e);
System.out.println("gain");
} @Override
public void windowLostFocus(WindowEvent e) {
// TODO Auto-generated method stub
super.windowLostFocus(e);
System.out.println("lose");
}
}); window.setFocusable(true); window.validate();
window.setVisible(true); }
});
f.setSize(800, 600);
f.setLocationRelativeTo(null);
f.setVisible(true); }}:
那个jwindow不是一个矩形么? window之外的区域就是指 那个矩形之外的区域..........
另外,我点击了好多下都没见输出"gain"和"lose"................
JWindow window = new JWindow();
和
JWindow window = new JWindow(f);
的差别。
我是在一个用JWindow实现悬浮窗的例子里遇到这种菜单不能自动消失的情况的, 主类继承了JWindow,似乎没有父窗体...........我再试试加个JFrame作为JWindow的父窗体...................................
ubuntu 8.04 + java 6u21
我的是win7, 用java -fullversion 查看到的是 1.6.0_21-b06........可能是因为你的是linux?