2015-10-27 46 views
1

我面臨一個問題,我無法將一個PNG圖像繪製到我的揮杆GUI到JPanel(我將其添加到JScrollPane之後)。問題與繪製PNG文件到揮杆GUI

這是我正在嘗試使用的代碼。

if(processCreated == true){ 
    System.out.println("updating tree of organisms"); 
    processCreated = false; 
    updateTree(); 
    try { 
     Thread.sleep(100); 
    } catch (InterruptedException ex) { 
     Logger.getLogger(Svet.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    tree = new File(path+"/out.png"); //File 
    try { 
     treeImage = ImageIO.read(tree); //BufferedImage 
     tp = new TreePane(treeImage.getScaledInstance(500, 500 ,treeImage.SCALE_SMOOTH)); // my class, implementation below 
     treeOutput.add(tp); //adding "JPanel" with picture into GUI 
     treeOutput.repaint(); 
    } catch (IOException ex) { 
     Logger.getLogger(Svet.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 

此後JScrollPane保持空。我的代碼有什麼問題嗎?你可以在評論中找到什麼。

這裏是我

TreePane
public class TreePane extends JPanel{ 
    Image img; 

    public TreePane(Image img){ 
     this.img = img; 
    } 

    public void paintComponent(Graphics g){ 
     super.paintComponent(g); 
     int imgX = 0; 
     int imgY = 0; 

     g.drawImage(img, imgX, imgY, this); 
    } 
} 
+1

「TreePane」的首選大小是(0,0),這就是滾動窗格使用的內容。你可以重寫'getPreferredSize()',但最簡單的就是使用'JLabel'來顯示圖像。 – kiheru

+1

我同意@kiheru:不要刁難 - 使用JLabel,將其放入JScrollPane,並簡單地設置其圖標。 –

回答

0

很可能你的TreePane是奠定了大小0,0,所以你永遠也看不到任何東西。嘗試添加一個斷點並在paintComponent中檢查 - 它甚至可能不會被調用。

要修復,您應該在將其添加到JScrollPane之前明確設置TreePane的大小。

tp = new TreePane(treeImage.getScaledInstance(500, 500 ,treeImage.SCALE_SMOOTH)); // my class, implementation below 
    tp.setSize(myWidth, myHeight); 
    treeOutput.add(tp); //adding "JPanel" with picture into GUI 
    treeOutput.repaint(); 
+1

而不是設置大小,大多數佈局管理員不尊重,爲什麼不重寫'getPreferredSize',並將返回值作爲圖像大小? –

+0

優秀點! – ControlAltDel

+1

實際上可能更容易的是簡單地將JLabel放入JScrollPane中並設置其圖標。 –