gpt4 book ai didi

Java图形问题

转载 作者:行者123 更新时间:2023-11-29 03:52:55 24 4
gpt4 key购买 nike

我有一个带有监听器的 JComponent。在 JComponent 上,我绘制了一个大图像,鼠标监听器在发生点击的地方添加了小图像(我在一张大 map 上添加了一些点)。

如何以编程方式在 paintComponent 方法之外绘制一些东西?

 public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;

g2.drawImage(img1, 0, 0, this);
g2.finalize();

}

private MouseListener listener;

public void initListener() {
myCanvas = this;
listener = new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
myCanvas.getGraphics().drawImage(img,e.getX(),e.getY(), myCanvas);
}
};
addMouseListener(listener);

}

我的问题是:

public void drawDot(int x, int y){
myCanvas.getGraphics().drawImage(img, x, y, myCanvas);
}

它什么都不做。我已经尝试过 repaint()。

最佳答案

你不能这样做。所有绘图都发生在 paintComponent() 方法中。你应该做的是建立一个代表你想要绘制的模型,并在你的鼠标监听器中修改模型。然后调用 repaint() 要求在修改模型时重绘这个组件。在您的 paint() 方法中渲染模型中的完整油漆。例如:

List<Point> pointsToDrawSmallerImage = new ArrayList<Point>();

...

listener = new MouseAdapter() {
public void mouseClicked(MouseEvent evt ) {
pointsToDrawSmallerImage.add( evt.getPoint() );
repaint();
}
}
...

public void paintComponent(Graphics g) {
g.clear(); // clear the canvas
for( Point p : pointsToDrawSmallerImage ) {
g.drawImage(img, p.x, p.y, myCanvas);
}
}

关于Java图形问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7881541/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com