Java 将png文件绘制到swing GUI时出现问题
我面临的一个问题是,我无法将png图像绘制到swing GUI的Java 将png文件绘制到swing GUI时出现问题,java,swing,Java,Swing,我面临的一个问题是,我无法将png图像绘制到swing GUI的JPanel(之后我将其添加到JScrollPane) 这是我的代码,我正试图使用它 if(processCreated == true){ System.out.println("updating tree of organisms"); processCreated = false; updateTree(); try { Thread.sleep(100);
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,因此你永远看不到任何东西。尝试在paintComponent中添加断点并进行检查-它可能永远不会被调用 要修复此问题,应在将树面板添加到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();
很可能你的树面板的尺寸是0,0,因此你永远看不到任何东西。尝试在paintComponent中添加断点并进行检查-它可能永远不会被调用 要修复此问题,应在将树面板添加到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();
TreePane
的首选大小是(0,0),这就是滚动窗格使用的大小。您可以覆盖getPreferredSize()
,但最简单的方法是只使用JLabel
来显示图像。我同意@kiheru的观点:不要让事情变得困难——使用JLabel,将其放入JScrollPane,然后简单地设置其图标。TreePane
的首选大小是(0,0),这就是滚动窗格使用的大小。您可以覆盖getPreferredSize()
,但最简单的方法是只使用JLabel
来显示图像。我同意@kiheru的观点:不要让事情变得困难——使用JLabel,将其放入JScrollPane,然后简单地设置其图标。与其设置大小,还不如设置一些大多数布局管理者不尊重的东西,为什么不让它重写getPreferredSize
,并根据图像的大小确定返回值?实际上,简单地将一个JLabel放入JScrollPane并设置其图标可能更容易。这也很有帮助。但在我自己的解决方案中,问题在于使用Swing组件,而使用AWT组件则效果良好。谢谢大家的帮助。与其设置大小,大多数版面管理员不尊重的东西,为什么不让它覆盖getPreferredSize
,并将返回值基于图像的大小?实际上,更简单的方法可能是将一个JLabel放入JScrollPane并设置其图标。这也很有帮助。但在我自己的解决方案中,问题在于使用Swing组件,而使用AWT组件则效果良好。谢谢大家的帮助。