【发布时间】:2012-02-13 12:58:00
【问题描述】:
在 java 中,我尝试使用容器类中的 getComponentAt(x, y) 方法。但是对于给定的 (x,y) 坐标,即使 (x,y) 包含一些图像/JLabel/JButton,它总是返回我类 javax.swing.JRootPane 的对象。
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JButton;
import javax.swing.JFrame;
public class temp2 implements MouseListener{
public static void main(String[] arg){
frame = new JFrame("adsa");
frame.setBounds(0, 0, 1000, 1000);
frame.setVisible(true);
frame.addMouseListener(new temp2());
JButton l = new JButton("asdasd");
frame.add(l);
l.addMouseListener(new temp2());;
}
static JFrame frame;
@Override
public void mouseClicked(MouseEvent e) {
int x = e.getX();
int y = e.getY();
System.out.println(frame.getComponentAt(x, y).getClass());
System.out.println(frame.getComponentAt(x, y) instanceof JButton);
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
}
这是我用于测试的示例代码.. 每当我点击按钮时,我都会得到以下输出:
class javax.swing.JRootPane
false
【问题讨论】:
-
getComponentAt(x, y) 应该做你想做的事,所以你的代码有问题。恐怕如果没有一些小代码示例来演示问题,您将无法获得太多帮助。
-
@Guillaume Polet 发布代码
-
通过添加
Component c = SwingUtilities.getDeepestComponentAt(....和System.out.println(c);返回 SwingUtilitiesjavax.swing.JButton[,0,0,101x72, align.....
标签: java swing jframe jcomponent