我遇到一个问题,我无法在我的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);
}
}
答案 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();