JAVAFX:使用图片和文字更新列表视图

时间:2018-08-28 14:00:53

标签: java listview javafx

我正在尝试使用javafx创建一个简单的国际象棋游戏。 我有两个装满图像的列表视图,每个图像附近都有一个计数器,它们代表从棋盘上移走的每一块的计数器。 有没有办法更新图像的计数器? 这是我用来创建起始列表的代码,并且带有0x计数器。

        lista2.setCellFactory(listview -> new ListCell<String>() {
        private ImageView imageView = new ImageView();
        @Override
        public void updateItem(final String item, final boolean empty) {
            Image img = null;
            super.updateItem(item, empty);
            if (empty) {
                setGraphic(null);
            } else {
                try(InputStream is = Files.newInputStream(Paths.get(GameView.RESFOLDER + item + GameView.FORMAT))){
                    img = new Image(is);                
                } catch(IOException e) {
                    System.out.println("Couldn't load image" + Paths.get(GameView.RESFOLDER + item + GameView.FORMAT));
                }        
                // true makes this load in background
                // see other constructors if you want to control the size, etc 
                imageView.setImage(img);
                setGraphic(imageView);
                setText("x0");
            }
        }
    });

1 个答案:

答案 0 :(得分:1)

updateItem()的{​​{1}}方法中,您做得太多。相反,您应该使用适当的数据模型对象来填充ListView

您应该更新基础对象,而不要在ListView中进行任何类型的计算。

这里是一个快速的示例应用程序来演示。您会看到我为CellFactory创建了一个单独的类。该对象包含您需要在ChessPiece中显示的所有信息。

然后,在我们的ListView中,您只需使用CellFactory中的值来更新显示的项目。

  

代码

ChessPiece
  

结果

以下是此应用程序产生的屏幕截图:

Screenshot