- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在使用此监听器时遇到问题,一般情况下的 gui 构造和工作正常,jlist 也在那里,但是当我在列表中选择某些项目时,我看不到结果,也看不到我为之编写的 printl()测试目的,请注意此代码包含在 getJContentPane 中,以便在初始化时添加事件处理程序
private JList myList=new JList(dlm);//a defaultlistmodel
myList.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent evt) {
if (evt.getValueIsAdjusting()){
System.out.println("Eventhandler called");
return;
}
System.out.println("Eventhandler called");
doMyMethod(evt);
}
});
doMyMethod():
private void doMyMethod(ListSelectionEvent e){
if(e.getValueIsAdjusting()){
return;
}else{
String item=(String)e.getSource();
accounter.add(item);
}
}
这是一个非常简单的方法,它将 ListSelectionEvent 的实例作为参数在我看来,主要问题不是执行非常基本操作的 doMyMethod(),而是根本没有触发 eventHandler 的事实,似乎 gui 根本没有“听”这个列表
有什么想法吗?
这里是初始化代码:
private JScrollPane getScrollBox() {
if (scrollboxBox == null) {
scrollboxBox = new JScrollPane();
scrollBox.setBounds(new Rectangle(280, 56, 245, 204));
scrollBox.getViewport().add(myList,null);
myList.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent evt) {
System.out.println("addListSelectionListener");
if (evt.getValueIsAdjusting()){
System.out.println("Eventhandler called");
return;
}
System.out.println("Eventhandler called");
doMyMethod(evt);
}
});
}
return scrollboxBox;
}
最佳答案
试图了解问题中发生的事情后,我知道您未能在更改选择时在列表中获得选定的项目。
为了向您展示如何实现这一目标,我构建了以下示例。当调用 if else 的每个部分时,您可以在那里观察。 if(e.getValueIsAdjusting())
总是在您将鼠标拖到项目上时执行。当您在之前单击某个项目时释放鼠标时调用 else 部分。
您提供的代码中存在一些严重的问题,因此我尝试删除所有不必要的部分,例如
1. doMyMethod()
方法和 if(e.getValueIsAdjusting())
中的代码片段永远不会被调用,因为您已经在检查在它被调用之前的那个条件。另外,无需编写处理监听器事件的方法,此代码应保留在私有(private)的监听器中。然后,如果您想以编程方式调用其代码,您可以调用 listener.valueChanged(evt)。
2. evt.getSource()
返回的对象是事件的作者,在这种情况下是 myList 而不是我认为您想要的所选项目,为此使用 getSelectedValue()
直接在源或 myList 上,因为此监听器仅服务于此列表。
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
public class ListTest extends JPanel
{
private JScrollPane myScrollPane;
private JList myList;
private ListSelectionListener lSL = new ListSelectionListener()
{
@Override
public void valueChanged(ListSelectionEvent evt)
{
if(evt.getValueIsAdjusting())
{
System.out.println("Eventhandler called evt.getValueIsAdjusting() true");
return;
}
else
{
// String item = (String) evt.getSource();//!!!Exception casting JList to String
//maybe what you need is getSelectedValue()
System.out.println("else called myList.getSelectedValue() ="+myList.getSelectedValue());
}
}
};
private ListTest()
{
int noRows = 25;
Object[] listData = new String[noRows];
for(int i =0; i < noRows; i++)
listData[i]= "Oi "+i;
this.myList = new JList(listData);
this.myScrollPane = new JScrollPane(myList);
myList.addListSelectionListener(lSL);
add(myScrollPane);
}
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
ListTest p = new ListTest();
JPanel contentPane = new JPanel();
contentPane.add(p);
JFrame f = new JFrame();
f.setContentPane(contentPane);
f.setSize(800, 600);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
});
}
}
希望即使它不能解决您的问题,它至少对构建 SSCCE 有帮助。为了我们。
关于java - JList 上的 ListSelectionListener 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6105646/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!