我正在尝试在java-gnome
应用程序的GTK+3
中创建自定义信号,但不能。
import org.gnome.gtk.CheckButton;
public class MyCheckButton extends CheckButton {
// how can I add a cutom signal for this class
// fos example: the signal that has "my-signal" name.
}
我该怎么办?
我可以在python中完成
class MyCheckButton(Gtk.CheckButton):
__gsignals__ = {
'my_signal': (GObject.SIGNAL_RUN_FIRST, None,
(int,))}
abc = MyCheckButton()
abc.connect("my-signal", print)
abc.emit("my-signal", 543)
我已经在互联网上搜索了,但是找不到任何东西。
谢谢。
答案 0 :(得分:0)
我认为Java中没有类似的方法(基于源代码中没有相似结构的事实)。
但是您可以通过以下方式实现自己的处理程序:
示例代码:
public class MyCheckButton extends CheckButton {
// ...
private MySignalHandler handler; // #2
public interface MySignalHandler { // #1
public void onMySignal(int value);
}
public void connect(MySignalHandler handler) { // #3
this.handler = handler;
}
public void emitMySignal(int value) { // #4
if (handler == null) return;
handler.onMySignal(value);
}
}
然后您可以按照与其他事件相同的方式进行连接和发射。
MyCheckButton a = new MyCheckButton();
a.connect(new MyCheckButton.MySignalHandler() {
public void onMySignal(int value) {
System.out.println(value);
}
});
a.emitMySignal(10);
内置的Button
使用类似的方法通过添加connect(Clicked handler)
和emitClicked()
(source code)来定义点击事件