- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这里是第一个问题,希望我做得正确。
下面是我的问题的一个最小示例,我很快就提出了代表我的项目的示例。我为包含一些对象的 JList 创建了一个自定义渲染器(在示例中我使用了字符串来进行说明)。我的问题是,据我所知,如果我将 ListSelectionListener
添加到列表中,setSelected...()
方法系列不会触发以下事件:触发条件 if(e.getValueIsAdjusting())
。
在下面的示例中,问题在启动程序后立即显而易见:即使在将 JLabel 的选定文本分配为“none”后调用 list.setSelectedIndex(2);
,它也不会更改,直到您(用户)单击列表项。事实上,它必须与当前选择的项目不同。
我想要这个功能,这样我的程序流程将是,在用户从列表中添加/删除项目后,一旦选定的列表项发生更改,“ View ”就会立即更新。
我是否做错了什么,或者我的处理方法不正确?
谢谢。 :)
import java.awt.BorderLayout;
import java.beans.*;
import javax.swing.*;
public class Example implements PropertyChangeListener {
String ITEM_SELECTED = "Item Selected";
String DELETE_SELECTED = "Delete Selected";
PropertyChangeSupport pcs = new PropertyChangeSupport(this);
JLabel selected;
JList<String> list;
DefaultListModel<String> model;
public static void main(String[] args) {
new Example();
}
public Example() {
JFrame frame = new JFrame();
JPanel mainPanel = new JPanel(new BorderLayout());
model = new DefaultListModel<>();
model.addElement("Entry 1");
model.addElement("Entry 2");
model.addElement("Entry 3");
model.addElement("Entry 4");
model.addElement("Entry 5");
list = new JList<>(model);
selected = new JLabel("Currently selected: none");
list.setSelectedIndex(2);
list.addListSelectionListener(e -> {
if(e.getValueIsAdjusting()) {
pcs.firePropertyChange(ITEM_SELECTED, null, null);
}
}
);
JButton removeItem = new JButton("Remove item");
removeItem.addActionListener(e -> {
pcs.firePropertyChange(DELETE_SELECTED, null, null);
}
);
mainPanel.add(new JScrollPane(list), BorderLayout.WEST);
mainPanel.add(removeItem, BorderLayout.NORTH);
mainPanel.add(selected, BorderLayout.CENTER);
pcs.addPropertyChangeListener(this);
frame.add(mainPanel);
frame.setSize(300, 400);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
@Override
public void propertyChange(PropertyChangeEvent evt) {
String event = (String) evt.getPropertyName();
if (event.equals(ITEM_SELECTED)) {
selected.setText("Currently selected: " + list.getSelectedValue());
}
if (event.equals(DELETE_SELECTED)) {
int selectedIndex = list.getSelectedIndex();
model.removeElement(list.getSelectedValue());
if (selectedIndex > 0)
list.setSelectedIndex(selectedIndex-1);
else if (selectedIndex == 0)
list.setSelectedIndex(selectedIndex);
}
}
}
最佳答案
e.getValueIsAdjusting()
方法检查该值是否仍在调整。在您的情况下,由 list.setSelectedIndex(2)
触发的事件看起来会让 e.getValueIsAdjusting()
返回 false。
您可以通过执行相反的检查来解决此问题:!e.getValueIsAdjusting()
。
然后,这将检查响应的任何更改是否是该事件链的最终更改。
关于java - ListSelectionListener 调用 setSelected 方法时不会触发事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62349501/
我读了文档,但不太明白...参数“animate”有什么用? 我唯一注意到的事情: public void onItemSelected(AdapterView parent, View view,
我想在点击时更改按钮的图像。我在应用程序中有一个问题,应用程序用户以"is"和“否”的格式给出了答案。为此,我拍摄了两个带有复选框空图像的按钮。我想更改按钮的图像在 checkbox_fill 如果它
还有其他人遇到过这个问题吗?如果您以编程方式将 UITableViewCell 的选定状态设置为 YES,则会将文本标签着色为黑色? [单元格集选择:是] 我似乎无法弄清楚这一点。我希望它能突出显示单
我想保持一个单元格处于选中状态,并且仅在选择另一个单元格时才更改。在 tableView:cellForRowAtIndexPath: 我已经使用 [cell setSelected:YES] 设置了
应该给出什么类型的值.setSelectedButton才能在RadioButtonGroup构造中选择特定的Button。 我尝试过的: sap.ui.getCore().byId("RadioBu
我有一个带有2个背景图片的自定义UIButton: in Default State: default.png in Selected State: selected.png 在Xib文件中设置。 这
我有一个包含文本项目的图库。我可以使用 UI 或使用 setSelection(position) 以编程方式更改所选项目。但是,当我调用此方法时,有时项目背景不会更改为选定状态。我注意到,如果 se
我想通过单击另一个切换按钮来更改切换按钮的状态。我的代码不是那样工作的。该部分有问题: private void jToggleButton12ActionPerformed(java.awt.eve
我有一个 JFrame 表单,其中包含标签、文本字段、组合框和包含 2 个单选按钮的按钮组。在另一个表单中,我有一个 JTable,其中填充了有关学生的数据(学生 ID、姓名...),当我从表中选择一
我在我的网络应用程序中使用jCrop插件。但是,我试图预选图像上的一个区域,但这根本不起作用,并且没有预选任何区域。 这是我的代码: $('.position').live('click', func
我正在尝试加载我的首选项并更新微调器以显示之前保存的值。我以前从未使用过 spinner.setSelection 并不断收到 nullpointerexceptions。 String[] time
我正在为 GridView 使用 StickyGridHeader 库。我想根据应在 View 中显示的项目将 gridview 滚动到特定位置。 我已经尝试将 setSelection 用于我希望使
类(class) build protected Spinner tipSpinner; private ArrayAdapter adapterTip; 在 setContentView(R.lay
我有一个 ListView ,每当更新列表时,我都会强制滚动到列表底部。但是,在滚动到列表底部后,出于某种原因, ListView 会固定在该点,用户无法在列表上来回滚动以查看其他数据。 问题:在 s
我无法使用微调器 setSelection() 方法解决问题。我正在编写一个程序来保存数据库中的某种表中的数据。当用户打开一个程序时,它从数据库加载数据并添加 3 个空的“表”行,以便用户可以填充并保
我正在对话框中制作一个选择列表。 我已经完成了所有基本功能,比如添加了一个 setonitemclicklistener,但我想要的是默认设置列表的第一项,但是当我使用 setSelection(1)
我希望以编程方式使菜单上的特定项目被选中并显示,以便在按下 Enter 时执行相应的操作。不幸的是,我发现 JMenuItem.setSelected() 和 JPopupMenu.setSelect
我在应用程序中遇到了一个非常奇怪的崩溃。堆栈跟踪: java.lang.IndexOutOfBoundsException: charAt: -1 < 0 at android.text.Spanna
我有一个 ListActivity,它实现 onListItemClick() 并调用该类的 doSomething() 函数。后者包含 l.setSelection(position),其中 l 是
当匹配的编辑器被激活时,我试图选择一个树节点。 这是代码: private void selectNodeInTree(IEditorPart activatedEditor) { IEdito
我是一名优秀的程序员,十分优秀!