我强烈建议您先通读一下如何编写鼠标监听器 https://docs.oracle.com/javase/tutorial/uiswing/events/mouselistener.html。当您遇到困难时,这些教程(和 JavaDocs)是最好的起点
您的问题的“立即”答案是,您需要注册一个实例MouseListener
与你的组件,也许像......
private JPanel createCenterPanel() {
panel.addMouseListener(new MouseListen());
//panel.setLayout(null);
return panel;
}
这将“回答”您眼前的问题。
然而,你会发现很难尝试将这些人的行为结合起来。MouseListener
与面板,需要绘制结果。
更好的解决方案可能是从JPanel
它管理自己的MouseListener
Also, Graphics g = panel.getGraphics()
不是应该如何执行自定义绘画。看一眼执行自定义绘画以了解更多细节 https://docs.oracle.com/javase/tutorial/uiswing/painting/index.html
所以,相反,它可能看起来更像......
public class TrianglePanel extends JPanel {
private List<Point> points = new ArrayList<>(3);
public TrianglePanel() {
addMouseListener(new MouseListen());
}
@Override
public Dimension getPreferredSize() {
return new Dimension(200, 200);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g); //To change body of generated methods, choose Tools | Templates.
if (points.size() < 1) {
return;
}
for (int index = 0; index < points.size(); index++) {
Point nextPoint = points.get(index);
g.fillOval(nextPoint.x - 2, nextPoint.y - 2, 4, 4);
}
Point startPoint = points.get(0);
Point lastPoint = startPoint;
for (int index = 1; index < points.size(); index++) {
Point nextPoint = points.get(index);
g.drawLine(lastPoint.x, lastPoint.y, nextPoint.x, nextPoint.y);
lastPoint = nextPoint;
}
g.drawLine(lastPoint.x, lastPoint.y, startPoint.x, startPoint.y);
}
class MouseListen extends MouseAdapter {
public void mouseReleased(MouseEvent e) {
if (points.size() < 3) {
points.add(e.getPoint());
repaint();
}
}
}
}