代码之家  ›  专栏  ›  技术社区  ›  A.R.S.D.

将鼠标悬停事件添加到组合框项目

  •  -1
  • A.R.S.D.  · 技术社区  · 8 年前

    当鼠标光标悬停在组合框项目上时,如何使特定图像出现在JavaFX中指定的图像视图上? 以下是我所拥有的:

        Image myImage1 = new Image("MyImage1.jpg");
        Image myImage2 = new Image("MyImage2.jpg");
        Image myImage3 = new Image("MyImage3.jpg");
        ImageView myImageView = new ImageView();
        ComboBox myComboBox = new ComboBox();
        myComboBox.getItems().addAll("Item1","Item2","Item3");
        //
        // Mouse Hover for ComboBox items here ...
        //
        // If Item1 Hovered -> ImageView.setImage(myImage1);
        // If Item2 Hovered -> ImageView.setImage(myImage2);
        // If Item3 Hovered -> ImageView.setImage(myImage3);
    

    谢谢

    1 回复  |  直到 8 年前
        1
  •  2
  •   James_D    8 年前

    在组合框上使用单元格工厂:

    Image myImage1 = new Image("MyImage1.jpg");
    Image myImage2 = new Image("MyImage2.jpg");
    Image myImage3 = new Image("MyImage3.jpg");
    ImageView myImageView = new ImageView();
    ComboBox<String> myComboBox = new ComboBox<>();
    myComboBox.getItems().addAll("Item1","Item2","Item3");
    
    Map<String, Image> images = new HashMap<>();
    images.put("Item1", myImage1);
    images.put("Item2", myImage2);
    images.put("Item3", myImage3);
    
    myComboBox.setCellFactory(lv -> {
        ListCell<String> cell = new ListCell<String>() {
            @Override
            protected void updateItem(String item, boolean empty) {
                super.updateItem(item, empty);
                setText(item);
            }
        };
        cell.hoverProperty().addListener((obs, wasHovered, isNowHovered) -> {
            if (cell.isEmpty()) {
                myImageView.setImage(null);
            } else {
                myImageView.setImage(images.get(cell.getItem());
            }
        });
        return cell ;
    });
    
    推荐文章