Как создать собственный сигнал в Java-гноме? - PullRequest
0 голосов
/ 02 сентября 2018

Я пытаюсь создать собственный сигнал в 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 Ответ

0 голосов
/ 05 сентября 2018

Я думаю, что в Java нет аналогичного способа (исходя из того, что в исходном коде нет аналогичной структуры).

Но вы можете реализовать свой собственный обработчик:

  • Определить интерфейс обработчика (# 1)
  • Добавить метод соединения (# 2, # 3)
  • Добавить метод emit (# 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() ( исходный код )

...