JavaFX在网格窗格中显示多个图像

时间:2017-09-22 02:43:16

标签: java image javafx gridpane

enter image description here我正在尝试制作一个在网格窗格中显示4个图像的简单程序。我得到一个没有问题,但一旦我尝试添加一秒我遇到一些问题。这是我的代码:

package sample;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception{

        GridPane gridPane = new GridPane();

        gridPane.add(new ImageView(new Image ("http://gifimage.net/wp-content/uploads/2017/06/american-flag-gif-13.gif")), 1,1);
        gridPane.add(new ImageView(new Image ("http://bestanimations.com/Flags/Asia/china/chinese-flag-waving-gif-animation-10.gif")), 2,2);

        Scene scene = new Scene(gridPane, 1000, 500);
        primaryStage.setTitle("Flags");
        primaryStage.setScene(scene);
        primaryStage.show();
    }


    public static void main(String[] args) {
        Application.launch(args);
    }
}

我认为这可能是图像后面的行和列的问题,但我尝试了一些事情并没有成功。任何帮助是极大的赞赏。感谢

2 个答案:

答案 0 :(得分:2)

flakes 是正确的,但它不是图像本身,而是它的可用性。如果我在浏览器中打开中国国旗的网址,一切正常,但请尝试修改后的代码:

['Matematika /', 'splnit do 21.', 'září (čtvrtek)\nnaučit se bezpodmínečně všechny tři mocninné vzorce\núkol byly příklady v sešitě na rozložení a složení vzorců\n\nAnglický jazyk /'
...
'lepidlo Kores,', 'tužky,', 'propiska či pero (modré)\n']

...我在TextField中得到的是:

服务器返回HTTP响应代码:403为URL:http://bestanimations.com/Flags/Asia/china/chinese-flag-waving-gif-animation-10.gif

HTTP 403 - 禁止访问

这似乎是罪魁祸首。

答案 1 :(得分:0)

代码没有问题。问题出在第二个gif图像上。例如,如果您下载它并从项目资源加载它将正确加载。现在为什么你不能访问"来自网址的gif是另一回事......我会检查它,如果我找到了什么,我会编辑这个答案。

编辑:

如果使用上面的代码加载图像,请进行一些调试:

gridPane.add( new ImageView(new Image(new URL( "http://gifimage.net/wp-content/uploads/2017/06/american-flag-gif-13.gif").openStream())), 0,
                0);
gridPane.add(new ImageView(new Image(new URL("http://bestanimations.com/Flags/Asia/china/chinese-flag-waving-gif-animation-10.gif").openStream())),0, 1);

你会看到第二个gif会给你一个错误 java.io.IOException with Server返回HTTP响应代码:403 for URL ...

所以我猜服务器没有给出'通过http请求访问gif图片,这就是为什么你无法加载它。我不是一个专业的'当谈到Https请求时,我可能错了。

403 Forbidden with Java but not web browser?

使用上面的帖子,您可以稍微修改一下代码并加载它:

URL url = new URL("http://bestanimations.com/Flags/Asia/china/chinese-flag-waving-gif-animation-10.gif");
URLConnection conn = url.openConnection();
conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11");

conn.connect();

GridPane gridPane = new GridPane();

gridPane.add(new ImageView(new Image(new URL("http://gifimage.net/wp-content/uploads/2017/06/american-flag-gif-13.gif").openStream())), 0,0);
gridPane.add(new ImageView(new Image(conn.getInputStream())), 0, 1);

我无法赶上@flakes @tomorrow:P