我有这个包含MouseEvent的方法。如何返回idu变量? 它就像一个方法中的方法或如何调用它,我无法弄清楚top返回idu变量的方式。
public int getId() {
int idu;
table.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 1) {
JTable target = (JTable)e.getSource();
int row = target.getSelectedRow();
Object record = data[row][0];
idu = (Integer) record;
}
}
});
return idu;
}
答案 0 :(得分:1)
几乎在所有情况下,“聆听者”都是如此。模式涉及使用没有返回值的方法注册侦听器。通常,来自侦听器的返回值是没有意义的,因为它被返回给调用者,该调用者没有关于如何处理它的上下文。
在我看来,你误解了你发布的代码中的一些内容: 1.在“getter”中注册听众是没有意义的。方法。监听器需要注册一次,通常在类的构造函数中 2.注册一个监听器并不能自己做任何事情:它只是告诉处理程序在事件发生时调用你的方法(在这种情况下点击鼠标)。 3.除非你在几个地方重复使用听众(你不是因为这是一个匿名课程而不在这个代码中),那么你不需要获得事件来源 - 你应该已经将它作为班级中的成员字段。
因此,您的案例的答案是您的JTable应该是您班级的成员字段。然后getId方法只需要返回表的选定行。无需注册鼠标侦听器,因为所选行在JTable中可用而无需任何额外工作。
答案 1 :(得分:0)
考虑以下问题:
什么时候可以准备好使用idu
值?当方法getId()
完成运行时,或者当用户在表格上单击鼠标按钮时?
你的代码实际上做的是注册事件监听器,有点像设置警报或安排任务以供日后使用,然后进入休眠状态,或者返回执行你现在需要做的任何其他任务。
退出idu
方法时,getId()
的值并不存在,因为mouseClicked()
方法中的代码尚未成功执行。它只会在事件实际发生时执行。