我遇到了一些actionlisteners问题,经过一些搜索后,我在这里找不到任何关于此的信息。从类中删除ActionListener
所以我有一个类“OctetsGraph”,它扩展JPanel并表示一个图,另一个类叫做“DataGenerator”,它实现了ActionListener。 DataGenerator用于运行everey X毫秒并将新数据添加到图形更新的数据集中。
DataGenerator(int interval)
{
super(interval, null);
addActionListener(this);
}
在I绘制在曲线图上的形式,我有一个列表,以及列表上的每个元素被suposed具有“OctetsGraph”。每次更改选定的对象时更新图形都没有问题。我在程序的开始处有一个“OctetsGraph”,我将它设置为null,然后在选择其他元素时创建另一个“OctetsGraph”。问题是,与它关联的actionListener仍然在运行...
我认为actionListneres会简单地停止时,将OctetsGraph对象设置为null,但他们没有。那我该如何解决这个问题?
这是我的列表鼠标按下的事件,它为新对象设置了一个新的八位字节图形和一个新的动作列表器。我究竟做错了什么?
private void jList1MousePressed(java.awt.event.MouseEvent evt) {
this.panel = new OctetsGraph(60000);
jPanel2.removeAll();
javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, 20)
.addComponent(panel)
.addGap(20, 20, 20))
);
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addGap(20, 20, 20)
.addComponent(panel)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, 20))
);
jPanel2.revalidate();
jPanel2.repaint();
//Listener that fetches data every second
panel.new DataGenerator(1000).start();
}
有没有一种方法,我可以删除“面板”上活动的actionListeners?
预先感谢您
嗨there @camickr,是的,我使用Timer。对不起,我忘记提到这一点。这个想法很好,但我会如何阻止它?我尝试使用stop,但actionPerformed函数只是不停地重复......停止似乎没有做任何事情。我试图在DataGenerator中调用stopTimer来执行“this.stop()”,但也没有帮助。 –
哦,我想我发现了这个问题......出于某种原因,我没有收到任何听众......不应该这样做吗? “面板”是OctetsGraph对象 DataGenerator [] mls = panel.getListeners(DataGenerator.class); –
@PeterL。,听者与问题无关。当Timer触发时,它会调用您添加到Timer中的Action。所以你需要停止Timer,然后Timer停止调用Action。定时器有一个stop()方法。 – camickr