【发布时间】:2017-08-29 15:04:55
【问题描述】:
我遇到了这个监听器的问题,一般的 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;
}
【问题讨论】:
-
尝试递归是怎么回事?
-
没注意到递归方法,现在改了: synoniemenList.addListSelectionListener(new ListSelectionListener() { public void valueChanged(ListSelectionEvent evt) { if (evt.getValueIsAdjusting()){ System.out.println( "事件处理程序调用"); return; } System.out.println("事件处理程序调用"); do(evt); } });
-
@JBoy,请使用新代码编辑您的问题。
-
不确定我是否理解您的初始化代码的逻辑。如果内容窗格为空,则将侦听器添加到列表中,否则不添加。适当的 SSCCE (sscce.org) 会更有帮助。
-
@JBoy 现在它甚至无法编译。您曾经使用过
scrollboxBox,后来又使用了一行scrollBox(除非您定义了这两个字段,但代码没有意义)。我再次建议您提供 SSCCE。