Java 当我滚动图像时,自创图形消失,它们';我被安置在
我知道以前也有人问过类似的问题。例如: 1- 和2- 但是,我仍然无法在代码中找到错误。我觉得我已经按照答案中的建议做了 我试图实现的是简单的;我想从JFileChoser中选择一个文件(png图像),然后在单击地图时能够向该地图添加位置。应该用三角形指出位置。图像大于其所在的边框,因此应可滚动 我已经设法做到了这一切,但问题与上面两个问题相同——当我在图像上滚动时,我在图像上放置的三角形消失了。我的代码中有几个要点:Java 当我滚动图像时,自创图形消失,它们';我被安置在,java,swing,Java,Swing,我知道以前也有人问过类似的问题。例如: 1- 和2- 但是,我仍然无法在代码中找到错误。我觉得我已经按照答案中的建议做了 我试图实现的是简单的;我想从JFileChoser中选择一个文件(png图像),然后在单击地图时能够向该地图添加位置。应该用三角形指出位置。图像大于其所在的边框,因此应可滚动 我已经设法做到了这一切,但问题与上面两个问题相同——当我在图像上滚动时,我在图像上放置的三角形消失了。我的代码中有几个要点: public PlaceMarker(int xCoordinate,
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
然后,当我点击地图时,就可以在地图上添加位置
你只画过一个记号笔。paintComponent()将删除以前的标记
因此,您需要保留要绘制的这些自定义标记的列表,然后遍历该列表以绘制所有标记
查看中的
DrawOnComponent
示例,了解此方法的工作示例。如果您不尝试使用PlaceMarker
扩展JComponent
,而是将其设置为一个只包含坐标的逻辑类,则会简化一些事情,然后直接在面板的paintComponent
中进行绘制(ImageContainer
?)。这样做的缺点是,它会使一些事情,如工具提示,变得更加复杂。更重要的是,你应该试着用一个复制问题的方法更新你的问题。此外,还需要删除对PlaceMarker.paintComponent
中的repaint()
的调用。
super.paintComponent(g);
g.fillPolygon(xValuesArray, yValuesArray, 3);