簡體   English   中英

為什么使用setText后兩次調用Gtk TextBuffer onChanged?

[英]Why Gtk TextBuffer onChanged is called twice after using setText?

我試圖每次通過更改buffer.setText("...")或在用戶鍵入某些內容時都調用一個buffer.setText("...")的內容的函數,但是在使用setText之后,該函數被調用了兩次(而不是一旦)。

package com.example;

import org.gnome.gtk.*;

public class Main {

public static void main(String[] args) {
    Gtk.init(args);
    Window w = new Window();
    w.setDefaultSize(200, 200);

    TextBuffer buffer = new TextBuffer();
    buffer.setText("first text");
    TextView textView = new TextView(buffer);

    buffer.connect(new TextBuffer.Changed() {
        @Override
        public void onChanged(TextBuffer textBuffer) {
            System.out.println("onChange called with " + textBuffer.getText());
        }
    });

    buffer.setText("second text");
    buffer.setText("third text");

    w.add(textView);
    w.connect((Window.DeleteEvent) (source, event) -> {
        Gtk.mainQuit();
        return false;
    });
    w.showAll();
    Gtk.main();
}
}

此示例打印

onChange called with 
onChange called with second text
onChange called with 
onChange called with third text

知道為什么會這樣嗎? 我正在使用java-gnome 4.1和java 1.8。

gtk_text_buffer_set_textgtk_text_buffer_deletegtk_text_buffer_insert的組合。 該函數發出"delete-range""insert-text"信號。 這些信號具有默認處理程序 這些處理程序發出"changed"

因此,實際上,對於單個gtk_buffer_set_text調用信號按以下順序發出:

  1. "delete-range"
  2. "changed"
  3. "insert-text"
  4. "changed"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM