Canvas Can';t在JavaFX画布上显示图像
我刚刚开始涉足JavaFX领域,在尝试在画布上显示图像时遇到了一个问题。我在谷歌上搜索了几个小时,结果一无所获 这是我的代码(我在网上找到的): 它编译和运行良好,我没有发现任何异常,Hello World文本显示正确,但没有图像。我曾经尝试过绘制形状(如圆形和矩形),它们也可以正常工作,问题只是当我尝试显示图像时。System.out.println中的getWidth()和getHeight()调用都返回0.0Canvas Can';t在JavaFX画布上显示图像,canvas,intellij-idea,javafx,Canvas,Intellij Idea,Javafx,我刚刚开始涉足JavaFX领域,在尝试在画布上显示图像时遇到了一个问题。我在谷歌上搜索了几个小时,结果一无所获 这是我的代码(我在网上找到的): 它编译和运行良好,我没有发现任何异常,Hello World文本显示正确,但没有图像。我曾经尝试过绘制形状(如圆形和矩形),它们也可以正常工作,问题只是当我尝试显示图像时。System.out.println中的getWidth()和getHeight()调用都返回0.0 我使用的是IntelliJ Idea 2016.3.3 IDE,Java JDK
我使用的是IntelliJ Idea 2016.3.3 IDE,Java JDK 1.8.0_112,现在完全卡住了。非常感谢您的帮助。您确定该文件存在吗?创建一个
文件
对象,检查文件.exists()
的结果,将文件.toURI().toString()
的结果传递给图像
构造函数。谢谢。我按照你的建议做了,果然没有找到文件。我必须制定一条绝对路径才能让它发挥作用。你知道有没有使用相对路径的方法吗?我喜欢将我的资源与源代码放在一个单独的文件夹中,但我不知道使用什么作为路径。我试过“./res/earth.png”,但没用。如果我把图像放在源文件夹中,并将其称为“earth.png”@James_D,那么它也不起作用。我做了一些实验,找到了基本路径。从那里我可以看到我需要将src文件夹添加到路径中,因此我创建图像的新行是earth=newimage(“file:src/res/earth.png”)代码>非常感谢您的帮助。当然,如果图像将作为应用程序的一部分捆绑,那么使用文件可能不是最好的方法。这里有很多关于这个的问题。当我回到电脑前,我会看看是否能把它们挖出来。那将是一个很大的帮助,谢谢。
public class Main extends Application
{
@Override
public void start(Stage theStage)
{
theStage.setTitle( "Canvas Example" );
Group root = new Group();
Canvas canvas = new Canvas( 400, 400 );
GraphicsContext gc = canvas.getGraphicsContext2D();
gc.setFill( Color.RED );
gc.setStroke( Color.BLACK );
gc.setLineWidth(2);
Font theFont = Font.font( "Times New Roman", FontWeight.BOLD, 48 );
gc.setFont( theFont );
gc.fillText( "Hello, World!", 60, 50 );
gc.strokeText( "Hello, World!", 60, 50 );
Image earth = null;
try{
earth = new Image("file:/res/earth.png");
}catch(Exception e){
System.out.println(e.toString());
}
System.out.println("height: "+earth.getHeight()+" width: "+earth.getWidth());
gc.drawImage( earth, 180, 100 );
root.getChildren().add( canvas );
Scene theScene = new Scene( root );
theStage.setScene( theScene );
theStage.setResizable(false);
theStage.show();
}
public static void main(String[] args)
{
launch(args);
}
}