【发布时间】:2015-02-04 02:02:04
【问题描述】:
如果我创建一个继承自 JComponent 的新类,我重写了它的 paintComponent(Graphics g) 方法,通过使用 g 绘制一个圆圈,我应该修改什么以便仅当我在边界内单击时触发 MouseListener组件?
因为在我的组件的构造函数中,我添加了 setBounds(...),然后添加了一个 MouseListener,但是每次我单击自定义组件所在的容器内的任何位置时都会触发它,而不仅仅是在我单击它时触发。
我不想在 mouseClicked() 方法中检查事件是否发生在我的组件内部,我希望仅在单击内部时调用它。
这是我的代码:
public class Node extends JComponent {
private int x, y, radius;
public Node(int xx, int yy, int r) {
x = xx;
y = yy;
radius = r;
this.setBounds(new Rectangle(x - r, y - r, 2 * r, 2 * r));
setPreferredSize(new Dimension(2 * r, 2 * r));
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D gr = (Graphics2D) g;
gr.setColor(Color.BLACK);
gr.drawOval(x - radius, y - radius, 2 * radius, 2 * radius);
}
public static void main(String[] args) {
final JFrame f = new JFrame();
f.setSize(new Dimension(500, 500));
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JPanel p = new JPanel();
p.setLayout(new BorderLayout());
Node n = new Node(100, 100, 25);
n.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
super.mouseClicked(e);
System.out.println("clicked");
}
});
p.add(n);
f.add(p);
f.setVisible(true);
}
}
【问题讨论】:
-
请输入代码?我希望你的意思是你覆盖了
paintComponent(Graphics g),因为没有paintMethod(Graphics g)。 -
我为我的错误道歉,我已更正并添加了代码。
标签: java swing mouselistener jcomponent