Jpanel上的弹出菜单, 我在Jpanel上点击右键, 然后将鼠标拖到外面才放开, 结果菜单在窗体外面弹出, 怎么样解决?
代码: private class MyMouseHandler extends MouseAdapter {
@Override
public void mouseReleased(MouseEvent e) {
if(e.isPopupTrigger()) {
popupMenu.show(e.getComponent(), e.getX(), e.getY());
}
}
}
代码: private class MyMouseHandler extends MouseAdapter {
@Override
public void mouseReleased(MouseEvent e) {
if(e.isPopupTrigger()) {
popupMenu.show(e.getComponent(), e.getX(), e.getY());
}
}
}
解决方案 »
- 内部类在什么时候被创建?
- 请问如何在J#中使用非阻塞的ServerSocketChannel和ServerSocket,顶者有分
- java中,如何定位(行列)输出字符串?
- 框架<frameset>问题,左页面点一个控件右边打开一个页面,然后给右页面的一个控件传值。这样的问题如何实现?
- 如何将键盘输入的内容 填充至对象中
- 关于Eclipse的问题
- 请问在java中,如何释放资源?急!!!
- 建立与oracle数据库连接时,载入数据库驱动程序时,系统提示必须放入try块中
- drawLine画虚线?
- 为什么我把一个可运行的jar包展开之后,再用jar把它打包之后,就没法执行!
- 搞不懂了,公用对象数组NullPointerException问题
- 大家建库的时候留关系吗?
popupMenu.show(e.getComponent(), e.getX(), e.getY()); 在鼠标释放点弹出菜单, 有没有一种方法, 检测鼠标释放点是否已经在被侦听组件的范围之外? 如果是这样,就不需要弹出菜单
可以通过getX和getY来获得他们的坐标,然后进行判断。
谢谢, 除此之外会有现在成的方法没, 比如 Jpanel提供一种现在的方法来判断某坐标是否落入此Jpanel的范围?
你看下,怎么弹出来的。import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;public class UseRightButton extends JFrame implements MouseListener {
JPanel panel; JLabel display; public UseRightButton() {
setTitle("Use right button and popup menu");
setSize(400, 300); panel = new JPanel();
display = new JLabel(" ");
display.setOpaque(true);
display.setBackground(Color.yellow); panel.add(display); panel.addMouseListener(this);
display.addMouseListener(this); getContentPane().setLayout(new BorderLayout());
getContentPane().add(panel, BorderLayout.CENTER);
} public static void main(String[] args) {
UseRightButton rb = new UseRightButton();
rb.setVisible(true);
} public void mousePressed(MouseEvent e) {
if (e.getSource() == panel && e.getButton() == MouseEvent.BUTTON3) {
MyPopupMenu popup = new MyPopupMenu(this);
popup.show((Component) panel, e.getX(), e.getY());
} else if (e.getSource() == display
&& e.getButton() == MouseEvent.BUTTON3) {
MyPopupMenu popup = new MyPopupMenu(this);
popup.show((Component) display, e.getX(), e.getY());
}
} public void mouseEntered(MouseEvent e) {
} public void mouseExited(MouseEvent e) {
} public void mouseClicked(MouseEvent e) {
} public void mouseReleased(MouseEvent e) {
}
}
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;public class MyPopupMenu extends JPopupMenu implements ActionListener {
JMenuItem sayHello, sayHelloAgain, sayByeBye; UseRightButton useRightButton; public MyPopupMenu(UseRightButton urb) { useRightButton = urb; sayHello = new JMenuItem("Say Hello");
sayHelloAgain = new JMenuItem("Say Hello again");
sayByeBye = new JMenuItem("Say Bye Bye"); sayHello.addActionListener(this);
sayHelloAgain.addActionListener(this);
sayByeBye.addActionListener(this); add(sayHello);
this.addSeparator();
add(sayHelloAgain);
add(sayByeBye);
} public void actionPerformed(ActionEvent e) {
if (e.getSource() == sayHello) {
System.out.println();
useRightButton.display.setText("Hello!");
} else if (e.getSource() == sayHelloAgain) {
System.out.println("Hello! Hello!");
useRightButton.display.setText("Hello! Hello!");
} else if (e.getSource() == sayByeBye) {
System.out.println("Bye Bye!");
useRightButton.display.setText("Bye Bye!");
}
} static boolean foo(char c) {
System.out.print(c);
return true;
} public static void main(String[] argv) {
int i = 0;
for (foo('A'); foo('B') && (i < 2); foo('C')) {
i++;
foo('D');
}
}
}
foo 方法和 main 是不需要的,我在做测试的时候留下的,
忘记删除了,
你不须理会。