gpt4 book ai didi

java - 当我滚动放置的图像时,自行创建的图形消失

转载 作者:行者123 更新时间:2023-11-30 02:32:42 25 4
gpt4 key购买 nike

我知道以前曾问过非常相似的问题。例如这里:1-Disappearing components in JScrollPane和 2-Drawing in JPanel disappears when scrolling or ressizing the frame .

但是,我仍然找不到代码中的错误。我觉得我已经按照那里的答案建议做了。

我想要实现的目标很简单;我想从 JFileCoser 选择一个文件(png 图像),然后当我单击 map 时能够将位置添加到该 map 。该位置应该用三角形指出。该图像比它所在的边框大,因此它应该是可滚动的。

我已经成功做到了所有这些,但问题与上面两个问题相同 - 当我在图像上滚动时,我放置在图像上的三角形消失了。我的代码中的一些内容:

public PlaceMarker(int xCoordinate, int yCoordinate){
setBounds(xCoordinate, yCoordinate, 50, 50);
} //This class extends JComponent

@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.fillPolygon(xValuesArray, yValuesArray, 3);

repaint();
}

添加图像的按钮:

JMenuItem newImage = new JMenuItem("New Image");
newMap.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String directory = System.getProperty("user.dir");
fileChooser = new JFileChooser(directory);
int answer = fileChooser.showOpenDialog(MainFrame.this);
if(answer != JFileChooser.APPROVE_OPTION)
return;
File file = fileChooser.getSelectedFile();
String filePath = file.getAbsolutePath();
if(image != null)
remove(scrollPane);
image = new ImageContainer(filePath);
scrollPane = new JScrollPane(image);
scrollPane.setMaximumSize(image.getPreferredSize());

add(scrollPane, BorderLayout.CENTER);
pack();
validate();
repaint();
}
});

我的 ImageClass 中也有这个方法:

@Override
protected void paintComponent(Graphics g){
super.paintComponent(g);
g.drawImage(image.getImage(), 0, 0, this);
} //This class extends JPanel

最佳答案

then be able to add locations to that map when I click on the map.

super.paintComponent(g);
g.fillPolygon(xValuesArray, yValuesArray, 3);

您只能绘制一个标记。 PaintComponent() 删除之前的标记。

因此,您需要保留要绘制的这些自定义标记的列表,然后迭代该列表以绘制所有标记。

查看 Custom Painting Approaches 中的 DrawOnComponent 示例有关此方法的工作示例。

关于java - 当我滚动放置的图像时,自行创建的图形消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43871770/

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