gpt4 book ai didi

java - 来自 Vaadin Grid ButtonRender 的 PopupView

转载 作者:行者123 更新时间:2023-12-02 02:20:40 25 4
gpt4 key购买 nike

所以我认为这可能与 StreamSource 有关,但我无法完全找出问题所在。本质上我有一个 Vaadin 网格,可以从 SQL 数据库检索数据。 “图像”列保存上传图像的 BLOB 值(成功方法)。

我想做的是允许用户单击表格中的按钮并在弹出 View 中显示该图像。

我的 ViewExpenses 类:

aGrid.addColumn(reciept -> "Receipt", new ButtonRenderer<>(clickEvent ->{
new ButtonRenderer<>(clickEvent ->{

Window window = new Window();
window.setModal(true);
window.addCloseShortcut(ShortcutAction.KeyCode.ESCAPE, null);
UI.getCurrent().addWindow(window);
Expenses anExpense = aGrid.getSelectionModel().getSelectedItems().stream().findFirst().get();
long anID = anExpense.getId();
System.out.println(anID);
StreamResource.StreamSource streamSource = (StreamResource.StreamSource)aController.getImage(anID);
System.out.println("4");
StreamResource streamResource = new StreamResource(streamSource,"");
Embedded embedded = new Embedded("",streamResource);
System.out.println("5");
Image anImage = new Image("Reciept", streamResource);
window.setContent(anImage);
anImage.setSizeFull();
window.setSizeFull();

})
);

我的后端 DbController 类获取图像的方法:

 public InputStream getImage(long anIndex){
InputStream binaryStream = null;
try{Statement stmt = null;
int intIndex = (int) anIndex;
//connect to database
Class.forName("org.h2.Driver");
Connection conn = DriverManager.
getConnection("jdbc:h2:mem:Users", "sa", "");
System.out.println("Connected database successfully...");
//insert data
System.out.println("Getting expenses from the database...");
stmt = conn.createStatement();
ResultSet resultSet = stmt.executeQuery("SELECT * FROM EXPENSES");
Blob imageBlob = resultSet.getBlob(intIndex);
binaryStream = imageBlob.getBinaryStream(0, imageBlob.length());


}


catch (Exception e){

}
return binaryStream;
}

我已经为此摸不着头脑有一段时间了,如果有任何帮助,我将不胜感激。

最佳答案

您永远不会显示PopupView。然后,当单击该按钮时,监听器会初始化一个新的 PopupView,但不会对其执行任何操作。

您可以:

  1. 单击按钮时打开模式窗口:

    Window window = new Window();
    window.setModal(true);
    window.addCloseShortcut(KeyCode.ESCAPE, null);
    UI.getCurrent().addWindow(window);
    Image anImage = ...
    window.setContent(anImage);
    anImage.setSizeFull();
    window.setSizeFull();
  2. 使用ComponentRenderer呈现 PopupView

    grid.addColumn(x->new PopupView(...))
    .setRenderer(new ComponentRenderer())

(注意,使用组件渲染器会影响性能,按钮渲染器更轻)。

关于java - 来自 Vaadin Grid ButtonRender 的 PopupView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48547115/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com