程序源码:
import javax.swing.*;
import java.awt.*;
import java.util.*;
import java.awt.event.*;public class TestFrame extends JFrame
{
Panel controlPanel;
Panel cardPanel;
TextField text;
Label label;
Button button;

public TestFrame()
{
super("TestFrame");
setSize(600,500);

text=new TextField(60);
text.setText("aaaaaaaaaaaaaaaaaaa");

label=new Label("address: ");
button=new Button("Go");

getContentPane().setLayout(new BorderLayout());

controlPanel=new Panel();
controlPanel.add(label);
controlPanel.add(text);
controlPanel.add(button);

getContentPane().add("North",controlPanel);

cardPanel=new Panel();
// cardPanel.setLayout(new BorderLayout());
getContentPane().add("Center",cardPanel);

cardPanel.add(new Label("this is a test component!"));
TextField text2=new TextField(60);
text2.setText("bbbbbbbbbbbbbbb");
cardPanel.add(text2);

cardPanel.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
int x=e.getX();
int y=e.getY();
System.out.println("The click position is: "+x+","+y);

System.out.println(findComponentAt(x,y).getClass().getName().toString());
if(findComponentAt(x,y).getClass().getName().toString().equals("java.awt.TextField"))
{
System.out.println("click component: "+((TextField)findComponentAt(x,y)).getText());
}
if(findComponentAt(x,y).getClass().getName().toString().equals("java.awt.Label"))
{
System.out.println("Label's content: "+((Label)findComponentAt(x,y)).getText());
}
}
});

}

public static void main(String args[])
{
TestFrame app=new TestFrame();
app.setVisible(true);

app.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
}
奇怪的地方是:当我运行后,点击“bbbbbbbbbbbb”这个label的左边时,返回的居然是address label。可是这个address label是加在controlPanel中的啊,现在是cardPanel里的事件,怎么可以返回这个呢?同样的,点击“bbbbbbbbbbb”的右边的时候,返回的是controlPanel里的textfield “aaaaaaaaaaaaa”。还有,点击“bbbbbbbbbbbb”下方的空白的地方,居然会返回“bbbbbbbbb”这个textfield。总之,鼠标点击的位置和返回的该位置的组件不符合。不明白为什么会这样,请大家多多赐教!