请允许我解释一下我正在尝试做的事情 - 我认为标题大致解释了它,但我不太确定我正在以正确的方式做事,所以请更正如果我错了!
我使用 LayeredPane
创建了一个自定义对话框。本质上,jPanel
显示在 POPUP_LAYER
上,因此出现在主要内容的顶部。此面板包含一组简单的'label-textbox-okay-cancel' 控件。我将其称为“对话面板”。
我想做什么:
单击主窗口(包含在 LayeredPane
中)上的按钮时,对话框面板 将出现并允许用户输入一些文本,然后单击确定或取消。这一切都很简单,但我希望这段代码可以重复使用,这意味着主窗口上的其他按钮将调用相同的对话框面板,但标签中的文本不同。
这当然需要我包含某种回调函数,以便 对话框面板 上的确定按钮将根据调用它的按钮运行正确的代码。
我目前的尝试是存储一个字符串,该字符串将包含当用户单击对话框面板 上的确定按钮时应运行的函数的名称。我正在尝试检索此字符串并将其转换为函数名称,到目前为止,我发现了很多对“Reflection”的引用,其中许多暗示这不是一个好主意。
在任何情况下,我都无法让任何示例代码正常工作,因为我不明白下面代码中的“obj”是什么,也无法调用该方法:
method = obj.getClass().getMethod(myCallbackString);
我的问题是:
首先,我的做法是否正确?我非常乐于接受建议,但请尽量保持简单,因为我真的才刚刚开始!
其次,上面代码中的'obj'是什么?我真的很想知道,即使这不是我应该做的事情!
我的其他想法包括:我的Dialog Panel 是否应该在其自己的类中,如果是,又如何传递回调函数?
如有任何帮助或建议,我们将不胜感激。
顺便说一句:在回答“为什么不使用普通对话框?”这个问题时我只能说我目前正在试验,我只是想看看我能不能做到这一点!
MVK
最佳答案
Java 程序传入回调函数的通常方式是传递实现特定回调函数的接口(interface)实例。虽然不是必需的,但通常匿名实现接口(interface)。
例如,这是一个接口(interface):
interface MyCallback {
void performCallback();
}
这是您定义接受回调的对话框方法的方式:
void openWithCallback(MyCallback cb) {
// Do something useful...
...
// Perform the callback
cb.performCallback();
}
调用该方法的方式如下:
public void OpenDialog() {
myDialog.openWithCallback(new MyCallback() {
public void performCallback() {
System.out.println("Inside callback...");
}
});
}
关于java - 将函数作为字符串传递的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11383347/