RT
我在JFrame放了几个JPanel, JPanel里又有其他东西, 然后事件监听加在JFrame上
当鼠标点击事件发生时 好象JFrame并没有产生相应的事件
我想了下鼠标是点在了JFrame里的其他组件上而不是JFrame上, 因此没有相应事件产生 对不对???
有什么办法让鼠标事件不管发生在哪个位置 都能让事件得到监听?
不要告诉我给每个组件都加上监听,太麻烦 也不够简洁, 我要的是加在顶层容器上 能监听容器里任何组件上发生的鼠标事件的方法
不知道我的表述够不够清楚.....
谢谢
我在JFrame放了几个JPanel, JPanel里又有其他东西, 然后事件监听加在JFrame上
当鼠标点击事件发生时 好象JFrame并没有产生相应的事件
我想了下鼠标是点在了JFrame里的其他组件上而不是JFrame上, 因此没有相应事件产生 对不对???
有什么办法让鼠标事件不管发生在哪个位置 都能让事件得到监听?
不要告诉我给每个组件都加上监听,太麻烦 也不够简洁, 我要的是加在顶层容器上 能监听容器里任何组件上发生的鼠标事件的方法
不知道我的表述够不够清楚.....
谢谢
package com.gui;import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;import javax.swing.JFrame;
import javax.swing.JPanel;public class FrameTest extends JFrame { public FrameTest() {
JPanel p = new JPanel();
p.setBackground(Color.red);
this.add(p, BorderLayout.CENTER);
this.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) {
System.out.println("clicked");
} });
} public static void main(String[] args) {
FrameTest frame = new FrameTest();
frame.setSize(400, 300);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
不管你怎么点 都是点在frame上的!!
package com.gui;import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;public class FrameTest extends JFrame { public FrameTest() {
JPanel p = new JPanel();
p.add(new JButton("btn in panel"));
p.setBackground(Color.red);
this.add(p, BorderLayout.NORTH);
this.add(new JButton("btn in JForm"), BorderLayout.SOUTH);
this.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) {
System.out.println("clicked");
} });
} public static void main(String[] args) {
FrameTest frame = new FrameTest();
frame.setSize(400, 300);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
package com.gui;import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;public class FrameTest extends JFrame { public FrameTest() {
JPanel p = new JPanel();
p.add(new JButton("btn in panel"));
p.setBackground(Color.red); this.add(p, BorderLayout.NORTH);
this.add(new JButton("btn in JForm"), BorderLayout.SOUTH); // --------设置组建事件--------
setMouseListener(this);
// 获取当前面板
Container contentPanel = this.getContentPane();
// 获取当前面板中的所有组件
Component[] comps = contentPanel.getComponents(); for (Component c : comps) {
setMouseListener(c);
// 如果当前面板中含有JPanel组件
if (c instanceof JPanel) {
Component[] compsInPanel = ((JPanel) c).getComponents();
for (Component cc : compsInPanel) {
setMouseListener(cc);
}
}
}
// ----------------------------
} /**
* 设置组件事件
*
* @param c
*/
public void setMouseListener(Component c) {
c.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
System.out.println("clicked");
}
});
} public static void main(String[] args) {
FrameTest frame = new FrameTest();
frame.setSize(400, 300);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
public void eventDispatched(AWTEvent event) {
...
}
}, AWTEvent.MOUSE_EVENT_MASK);
其实 10楼上可以让面板 添加监听 但在JPanel上的物件 不能享受到监听 其实这是java为防止 出现监听混乱 所以你需要 对按钮也需要添加监听的话 需要 另外监听 另外我试试了11楼的 可以实现全部监听 功能和用法去看API 吧 我就能帮你到这了!!剩下的自己多试下!