- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我是 Vaadin 的新手。我正在尝试操作以下小部件。
private VerticalLayout layout;
ProgressBar bar = new ProgressBar(0.0f);
Button downLoadButton;
private void setupLayout() {
layout = new VerticalLayout();
layout.setDefaultComponentAlignment(Alignment.MIDDLE_CENTER);
setContent(layout);
}
private void setStockDownloadUI() {
TextField tf = new TextField("Downloading");
tf.setValue("Downloading stock data. It takes about 15 seconds.");
tf.setWidth("400");
tf.setVisible(false);
layout.addComponent(tf);
bar.setHeight("100");
bar.setWidth("500");
bar.setIndeterminate(true);
bar.setVisible(false);
layout.addComponent(bar);
Page.getCurrent().reload();
downLoadButton = new Button("Start download", click -> {
tf.setVisible(true);
bar.setVisible(true);
float current = bar.getValue();
if (current < 1.0f)
bar.setValue(current + 0.10f);
stockService.downloadStockContent();
startTimer();
Notification.show("Downloading",
"Stock data downloading. Please wait.",
Notification.Type.TRAY_NOTIFICATION);
});
downLoadButton.addStyleName("huge");
layout.addComponent(downLoadButton);
}
void checkDownloadStatus() {
stockElements = callBack.getDownloadedStock();
if (stockElements != null && stockElements.size() != 0) {
MessageBox
.createInfo()
.withCaption("Example 1")
.withMessage("Hello World!")
.withOkButton()
.open();
bar.setVisible(false);
layout.removeAllComponents();
timer.shutdownNow();
for (StockElement element : stockElements) {
System.out.println(element.toString());
}
}
}
有几个问题。我正在从网上下载一些内容。首先,我通过 setStockDownloadUI() 设置 UI。我在其中设置了进度条。下载完成后,我调用 checkDownloadStatus()。我想隐藏进度条。另外,当单击下载按钮一次时,我想禁用它。这样就不会被点击两次。
在 checkDownloadStatus() 中,我创建了一个从未在浏览器中显示的消息框。另外,我调用了layout.removeAllComponents();我尝试在下载完成后删除所有内容。但没有效果。
问题:
更新
我发现如果我从另一个按钮单击调用方法:
workaroundButton = new Button("Work around", click -> {
this.bar.setVisible(false);
this.layout.removeComponent(bar);
this.layout.removeComponent(downLoadButton);
this.layout.removeComponent(textField);
layout.removeAllComponents();
});
然后就可以了。但如果我只是从我自己的回调方法中调用这些方法,这是行不通的。但这是 Not Acceptable 。我相信我的代码中遗漏了一些东西。
更新2
回答后,我尝试了以下代码。即使我通过调试器设置断点,它也永远不会到达 bp。所以代码从未被执行过。我错过了什么吗?我正在尝试通过计时器检查下载状态。
@Push
@Theme("mytheme")
public class StockApplication extends UI {
// code removed.
}
private void startTimer() {
ScheduledExecutorService timer = Executors.newSingleThreadScheduledExecutor();
timer.scheduleWithFixedDelay(new Runnable() {
public void run() {
UI.getCurrent().access((() -> {
// breakpoint never hit this book of code
MessageBox
.createInfo()
.withCaption("Wait")
.withMessage("Still downloading stock contents. Please check again after a while")
.withOkButton(() -> System.out.println("Ok pressed."))
.open();
checkDownloadStatus();}));
}
}, 1, 1, TimeUnit.SECONDS);
}
出了什么问题?请让我知道如何修复它?
我可以使用以下代码修复它:-
private void startTimer() {
UI ui = UI.getCurrent();
timer.scheduleWithFixedDelay(new Runnable() {
public void run() {
ui.access((() -> {
checkDownloadStatus();}));
}
}, 1, 1, TimeUnit.SECONDS);
}
所有的功劳都归于通过他/她的宝贵信息给我提示的人。
最佳答案
downLoadButton.setDisableOnClick(true)
2+3。我们正在谈论Vaadin Push这里。正如您所注意到的,默认情况下,只有浏览器触发了更改(例如,单击上面的 workaroundButton
),Vaadin 组件的更新才会返回到浏览器。要将未经请求的更新发送回浏览器,您需要启用推送,它在幕后使用 Websocket 来允许浏览器继续接收更新。
上面的链接解释了如何为您的 UI 启用推送。
一旦启用推送,它就非常流畅 - 您可以像平常一样操作小部件,并且更改仍然会返回到浏览器。您只需要记住将这些更新包装在 UI.access()
中即可确保您拥有 session 锁。例如。 :
ui.access(() -> checkDownloadStatus());
ui
只是您的 UI 类,或者您可以使用 widget.getUI()
从任何小部件获取它。
关于java - Vaadin 操作一些小部件的几个基本问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49474234/
我有一个示例应用程序,包含以下三个步骤 输入用户详细信息 -> 个人详细信息 -> 完成 当我点击一个链接时,它会调用我的 vaadin 应用程序。问题是一旦我的三步过程完成,当我再次尝试点击我的 v
我希望框架捕获每个未捕获的异常并显示适当的通知消息。 因此我在我的 UI 中设置了一个自定义的 ErrorHandler(灵感来自“Book of Vaadin”:https://vaadin.com
我在 Vaadin 有一张 table 。一列是 String 类型,因此其大小是可变的。因此,我想让列的宽度固定(具有扩展比率),但每行的高度应该是可变的(根据其内容 - 字符串)。 即,这是预期的
有谁知道用于 vaadin 框架的数据可视化(图表、饼图等)的任何 UI 组件库? 最佳答案 我建议 dChart: https://vaadin.com/directory#!addon/dchar
我在 Grid 中使用 BeanItemContainer 来显示我的数据。我需要根据单元格中的数据分别为每个单元格着色。 最佳答案 section about the Grid在 Vaadin 的书
在我的一个应用程序中,我创建了一个页脚: public Footer(){ hl.setHeight("120px"); hl.setWidth("100%");
是否有任何特定方法可以在 Vaadin 表中实现分页/延迟加载。 我试图找到一些文档,但我找不到。 最佳答案 使用Viritin add-on及其 MTable 组件。 I 是最有效的(服务器资源副)
我正在尝试使用 Vaadin Charts 创建饼图。 这段代码为图表添加了漂亮的标签,但小数点 t 后两位数字就足够了。 dataLabels.setFormatter("''+ this.poi
我是 vaadin 框架的新手,一切正常,直到......表头没有正确显示,......我正在开发一个在 exoplatform 上运行的 portlet,我正在使用 vaadin 6,我的表只显示第
我有一个带有基于复杂查询填充数据的表的页面(即使我使用分页也需要很多时间)。我使用 BeanItemcontainer 将数据加载到表中。现在遇到问题,我希望以异步方式将数据加载到表中(在用户屏幕上加
我有一个现有的应用程序(在 WebGuiToolkit.org 中编写),我正在尝试在其中嵌入一个 Vaadin 14 页面。 我看过几个 Vaadin 8 指南,比如 https://vaadin.
更改pom.xml文件的vaadin版本号和vaadin插件版本号后构建失败 7.4.5 7.4.5 然后我尝试清理并重建项目,但显示构建失败: Copying 3 resources --- va
我想通过更改文件列表中元素的外观来设置 Vaadin Upload 组件 (vaadin-upload) 的样式,例如隐藏命令按钮(开始、删除、重试)。文件列表包含 vaadin-upload-fil
如何向文本字段、选项卡、链接、标签等添加悬停文本(即当我将鼠标悬停在组件上时出现的包含一些解释或详细信息的文本框) 我用谷歌搜索并浏览了“Book of Vaadin”和“Building Moder
this.grid.asSingleSelect().addValueChangeListener(event -> { if (!Objects.isNull(event.getVa
在 Vaadin 中,一旦您有了 TabSheet,并且已经打开了一些选项卡,您就不会希望多次打开包含相同内容的同一个 Tab。 如何检查选项卡是否已打开并将其设置为选定的选项卡? 最佳答案 默认情况
我已经使用 vaadin 创建了表格。现在我想为该表格中的特定列内容设置字体大小。是否可以为该表格中的特定列设置字体大小?。 如果是这样,请给我设置字体大小的想法。如果你能提供我一些代码片段。 最佳答
是否可以在 vaadin 中以百分比设置表格的列宽。如果可以,请告诉我如何使用示例代码片段来做到这一点。提前谢谢。 最佳答案 是的。为此使用 Table.setColumnExpandRatio(co
我正在开发 Vaadin 8 UI。目前,每次修改 UI 时,我都必须重新启动我的应用程序。 有没有更好的办法?我曾尝试附加 Java 调试器并使用 IntelliJ 的 Reload Changed
序言:我是Vaadin的高级开发人员(我用过6、7,现在我的所有项目都已迁移到Vaadin 8)。 我开始学习Vaadin 10/Flow,但发现自己在一些热水中。 我实际上在挣扎的是“项目”本身。
我是一名优秀的程序员,十分优秀!