我知道,以前曾詢問過非常類似的問題。例如: 1- Disappearing components in JScrollPane 和2- Drawing in JPanel disappears when scrolling or ressizing the frame。當我滾動已放置的圖像時,自己創建的圖形消失
但是,我仍然無法找到我的代碼錯誤。我覺得我已經完成了那裏的答案。
我想要實現的是簡要的;我想從JFileChoser中選擇一個文件(一個PNG圖像),然後當我點擊地圖時能夠添加位置到該地圖。該位置應該用三角形指出。圖像比放置的邊框大,所以它應該是可滾動的。
我已經成功地做到了這一切,但問題是一樣的在上面的兩個問題 - 當我滾動的圖像,我已經放在圖像上的三角形消失。從我的代碼的一些影片花絮:
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
這將簡化一些東西,如果不是試圖有'PlaceMarker'延長'JComponent',你做它只是協調邏輯類,然後直接在'paintComponent'它畫在你的面板('ImageContainer'?) 。不利的一面是,它會讓一些東西像工具提示變得更復雜一些。更重要的是,你應該嘗試用一個[最小的,完整的例子](http://stackoverflow.com/help/mcve)來更新你的問題,它會重現這個問題。此外,您需要刪除對'PlaceMarker.paintComponent'內的'repaint()'的調用。 – Radiodef