代码之家  ›  专栏  ›  技术社区  ›  Nomad

如何在JavaGNOME中创建自定义信号?

  •  4
  • Nomad  · 技术社区  · 7 年前

    我正在尝试在中创建自定义信号 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)
    

    我在网上搜索过,但什么也没找到。

    1 回复  |  直到 7 年前
        1
  •  0
  •   MaanooAk    7 年前

    我认为Java中没有类似的方式(基于源代码中没有类似结构的事实)。

    但您可以通过以下方式实现自己的处理程序:

    • 定义处理程序接口(#1)
    • 添加连接方法(#2,#3)
    • 添加发射方法(#4)

    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 )