- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个普通的 JTable 和一个 ListSelectionListener。我想它应该可以正常工作,但有一个问题:
这会产生明显的延迟。
我可以更改 Activity 的顺序吗?我想先有蓝色背景,然后进行http请求。在 valueChanged 方法中插休眠眠计时器会使选择等待,直到计时器完成。
最佳答案
您可能应该在后台线程上执行 HTTP 请求。如果需要异常长时间,这还有一个优点是可以保持 UI 响应。
您最终会得到类似这样的代码,具体取决于您的实际需求:
private static class HttpWorker extends SwingWorker<Void, Void> {
private final String url;
private HttpWorker(String url) {
this.url = Objects.requireNonNull(url);
}
@Override
protected Void doInBackground() {
// do request, possibly producing some result
}
@Override
protected void done() {
if (!isCancelled()) {
// update UI
}
}
}
private HttpWorker worker;
@Override
public void valueChanged(ListSelectionEvent e) {
if (worker != null) {
// preserve apparent order of operations if
// the user selects something different while
// a background task is already running
worker.cancel(true);
worker = null;
}
worker = new HttpWorker(...);
worker.execute();
}
doInBackground
通常可以执行任何操作,只要您不通过它与 Swing UI 交互即可。
另请参阅the SwingWorker
tutorials和 documentation .
为了获得完整的答案,在列表选择事件开始时执行以下操作可能有效:
jlist.paintImmediately(0, 0, jlist.getWidth(), jlist.getHeight());
至少是 paintImmediately
被指定执行隐含的操作:
Paints the specified region in this component and all of its descendants that overlap the region, immediately. [...] This method is useful if one needs to update the display while the current event is being dispatched.
我不建议使用它的原因是,没有特殊原因需要在我们自己的监听器之前更新 JList
,以便列表实际上绘制新的选择。
还有一个问题是,像 HTTP 请求这样的繁重任务通常不应该在 Swing 线程上完成,因为它会卡住 UI。即使您希望用户等待一段时间,您也不会直接在 Swing 线程上执行该任务。您可以在后台线程中执行此操作并弹出一个模式对话框,可能为用户提供提前取消任务的选项。
关于java - ListSelectionListener 事件延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48449494/
我有一个普通的 JTable 和一个 ListSelectionListener。我想它应该可以正常工作,但有一个问题: 我点击表格行 事件触发(方法 valueChanged 启动) 在 value
这是我的代码。当您从左向右选择时出现问题.. import javax.swing.*; import javax.swing.event.*; pub
对于学校项目,我必须在 JList 上使用 ListSelectionListener(LSL)。我知道 LSL 会响应鼠标单击和鼠标释放。但对于该项目,我必须让它响应双击。有没有办法让 LSL 对此
我想要一个 ListSelectionListener 事件来更改 JPanel。我知道它被正确触发,因为打印语句正在工作,但是面板根本没有改变。 DefaultListModel leftList
目前正在开发 Swing 应用程序,我需要使用 ListSelectionListener 来获取 JList 中的当前选定值。我知道如何将它添加到 JList 本身,但是无论我实现什么,编译器都找不
我只是想看看哪个元素被选中,并根据索引更改框架上的其他标签和文本域。我的代码如下: list = new JList(listModel); list.setSelectionMode
我有带有 JList 和 ListSelectionListener 的 Java 类: final JList myList = new JList(); // ... myList.addList
class MyListListener implements ListSelectionListener { public void valueChanged (ListSelectio
例如,我有一个名为 across_list 的 JList,其中包含项目列表,现在我向该 JList 添加一个 ListSelectionListener 考虑这些代码行: class AcrossL
我有 2 个 jlist 和 1 个 jbutton。我想要做的是,当用户选择一个 jlist 中的某些项目,然后单击按钮,一些元素会根据选择出现在另一个 jlist 上。我的问题是 && 条件,因为
我有包含一些行的 Jtable。如果我选择某些行,则每次都会调用 addListSelectionListener(对于每个行选择)。有什么方法可以避免这些多次调用,因为如果我选择 10000 行,它
我使用 ListSelectionListener 来监听 JTable 的选择,以执行与表中所选项目相关的其他任务。但是为什么下面的代码在一开始的一个选择中执行了两次,而在更新该表之后执行了多次?
我有一个包含联系人姓名的 JTable。从该表中选择一行后,第二个表将填充该人的主要电话号码和电子邮件地址。目前,我正在使用自定义 MouseListener 来检查人们何时单击第一个表格中的一行,但
我有一个表,其中包含我输入的所有学生详细信息。它位于我屏幕的左侧。在右侧,我有另一个带有文本字段的面板,它根据表中的选择显示学生详细信息。我们也可以修改这些细节。为了存储修改后的详细信息,我添加了一个
我在 JSplitPane 中有 2 个 DefaultListModel。 JSplitPane 的左侧有 RssChannel 标题。当选择 RssChannel 标题时,RssItem 标题应该
我在我编写的lil应用程序中随机出现了NullPointerException。基本上,它应显示一个数字列表,当选择其中一个数字时,一些详细信息应显示在窗口的其他部分。 当单击按钮添加新数据集时,会打
这里是第一个问题,希望我做得正确。 下面是我的问题的一个最小示例,我很快就提出了代表我的项目的示例。我为包含一些对象的 JList 创建了一个自定义渲染器(在示例中我使用了字符串来进行说明)。我的问题
我编写了一些在 JLabel 上设置图像的代码。 Image 的路径是通过 JList 上所选项目的 getSelectedValue() 方法获取的。 当用户从 JComboBox(即 typeCh
我最近一直在努力解决一个让我抓狂的 Java 问题。我一直在尝试将 Controller 中的 ListSelectionListener 添加到 View 中的 JList,但是当我成功地将监听器附
我有一个家庭作业,我正在构建一个 GUI JPane,它包含其他 JPanes 以允许显示多个对象。我的一位听众遇到编译错误,需要一些帮助来解决这个问题。让我先说一下我们不被允许使用 IDE。 错误是
我是一名优秀的程序员,十分优秀!