将png文件绘制到swing GUI中的问题

时间:2015-10-27 19:10:03

标签: java swing

我遇到一个问题,我无法在我的swing GUI中将png图像绘制到JPanel(我之后添加到JScrollPane中)。

这是我尝试使用的代码。

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 个答案:

答案 0 :(得分:0)

你的TreePane很可能被放置到0,0大小,因此你永远不会看到任何东西。尝试添加断点并在paintComponent中进行检查 - 它甚至可能不会被调用。

要修复,您应该在将TreePane添加到JScrollPane之前显式设置它的大小。

    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();