返回java值时出现的问题
我有一个包含MouseEvent的方法。如何返回idu变量? 它就像一个方法中的一个方法,或者如何调用它,我不知道top如何返回idu变量返回java值时出现的问题,java,return,mouselistener,Java,Return,Mouselistener,我有一个包含MouseEvent的方法。如何返回idu变量? 它就像一个方法中的一个方法,或者如何调用它,我不知道top如何返回idu变量 public int getId() { int idu; table.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { if (e.getClickCount() == 1) {
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;
}
几乎在所有情况下,“侦听器”模式都涉及使用没有返回值的方法注册侦听器。一般来说,来自监听器的返回值是没有意义的,因为它被返回给调用者,而调用者并没有关于如何处理它的上下文 在我看来,您似乎误解了您发布的代码中的一些内容: 1.在“getter”方法中注册侦听器没有什么意义。监听器需要注册一次,通常在类的构造函数中 2.注册侦听器本身并没有做任何事情:它只是告诉处理程序在事件发生时调用您的方法(在本例中是单击鼠标)。 3.除非您在多个位置重用侦听器(由于它是一个匿名类,所以不在本代码段中),否则您不需要获取事件源-您应该已经将它作为类中的成员字段
因此,在您的案例中,答案是JTable应该是类的成员字段。然后getId方法只需要返回表中选定的行。根本不需要注册鼠标侦听器,因为所选行在JTable中可用,无需任何额外工作。思考以下问题: 当
idu
值准备好使用时-当方法getId()
完成运行时,或者当用户在表上单击鼠标按钮时
您的代码实际要做的是注册一个事件侦听器,有点像设置一个警报或为以后安排一个任务,然后进入睡眠状态,或者返回到您现在需要执行的任何其他任务
退出
getId()
方法时,idu
的值不一定存在,因为mouseClicked()
方法中的代码还没有必要执行。它只会在事件实际发生时执行。似乎您对异步编程的工作原理有一个基本的误解。