4

私はインターネットで調査を行い、Java GnomeプロジェクトでGladeで設計されたUIを使用する方法を説明するチュートリアル/ドキュメントを探しましたが、運がありませんでした。Java Gnome/GTKを使用してコードからUIを作成する方法をすでに知っています。とにかく、Java Gnome /Gtkプロジェクトで作成したGladeUIを使いたいのですが、どこから始めたらいいのかわかりません。教えてください:

  • インストールする必要のあるパッケージ。

  • Glade(.gladeファイル)で作成したUIをJava Gnome / Gtkプロジェクト(特にEclipse)と統合する方法。

  • 例を挙げてください。

前もって感謝します。

これが私のGladeUIの外観です(画像をクリックするだけで大​​きく表示されます):

ここに画像の説明を入力してください

上記のUIのXMLコードは次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<interface>
  <!-- interface-requires gtk+ 3.0 -->
  <object class="GtkWindow" id="window1">
    <property name="can_focus">False</property>
    <property name="window_position">center</property>
    <child>
      <object class="GtkFixed" id="fixed1">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <child>
          <object class="GtkEntry" id="entry1">
            <property name="width_request">162</property>
            <property name="height_request">25</property>
            <property name="visible">True</property>
            <property name="can_focus">True</property>
            <property name="halign">start</property>
            <property name="valign">end</property>
            <property name="invisible_char">•&lt;/property>
          </object>
          <packing>
            <property name="x">11</property>
            <property name="y">49</property>
          </packing>
        </child>
        <child>
          <object class="GtkEntry" id="entry2">
            <property name="width_request">162</property>
            <property name="height_request">25</property>
            <property name="visible">True</property>
            <property name="can_focus">True</property>
            <property name="halign">start</property>
            <property name="valign">end</property>
            <property name="invisible_char">•&lt;/property>
            <property name="invisible_char_set">True</property>
          </object>
          <packing>
            <property name="x">271</property>
            <property name="y">49</property>
          </packing>
        </child>
        <child>
          <object class="GtkLabel" id="label">
            <property name="height_request">25</property>
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="label" translatable="yes">*</property>
          </object>
          <packing>
            <property name="x">216</property>
            <property name="y">49</property>
          </packing>
        </child>
        <child>
          <object class="GtkButton" id="button">
            <property name="label" translatable="yes">Calculate!!!</property>
            <property name="use_action_appearance">False</property>
            <property name="width_request">84</property>
            <property name="height_request">27</property>
            <property name="visible">True</property>
            <property name="can_focus">True</property>
            <property name="receives_default">True</property>
            <property name="use_action_appearance">False</property>
          </object>
          <packing>
            <property name="x">181</property>
            <property name="y">93</property>
          </packing>
        </child>
      </object>
    </child>
  </object>
</interface>
4

2 に答える 2

3

このクラスを使用することになっていますBuilder(java-gnome 4.0.20以降で使用可能)。それを作成し、メソッドを呼び出しaddFromFileてグレイドファイルを与えます。getObject次に、Glade UIに入力されたオブジェクトの名前で呼び出して、そのオブジェクトを取得します。私が欠けていると思うのは、信号接続のものだけです。元のGtkBuildergtk_builder_connect_signalsクラス(C)は、特に信号接続機能(たとえば)をはるかに多く提供します。したがって、これらの機能がJavaバインディングで使用できない場合は、手動でシグナルを接続する必要があります。これは、「信号」タブで接続する信号を空き地に設定し、この信号が呼び出すコールバックの名前を設定することを意味します。Pythonでどのように行われるかを確認することで、基本を正確に推測できます。

http://python-gtk-3-tutorial.readthedocs.org/en/latest/builder.html

残りの部分については、Webで「gladetutorial」または「gladegtkbuilder」を参照してください。

于 2013-01-15T10:42:49.513 に答える
3

OK、あなたはする必要があります:

  • GTKライブラリを初期化
  • Builderオブジェクトを作成する
  • ウィンドウウィジェットを取得する
  • ウィンドウウィジェットを表示する

Linuxシステムにjava-gnomeライブラリがすでにインストールされており、Eclipseプロジェクトにjarがインポートされていると仮定します(プロジェクトのプロパティ-javaビルドパス-外部jarの追加-/usr/share/java/gtk.jar)。

サンプルコード:

Gtk.init(args); //Init library
Builder b = new Builder();  //Create builder
b.addFromFile("filename.glade");  //Load layout from file
Window w = (Window) b.getObject("myWindowName");  //Retrieve an object
w.showAll(); //Show window
Gtk.main();

これが機能する方法です。ボタンなどのオブジェクトにリスナーを設定する場合は、ウィンドウで前に見たように、名前でオブジェクトを取得してから、次のようにします。

button.connect(new Clicked() {

    @Override
    public void onClicked(Button arg0) {
        // Do what you want
    }
});

それはあなたのために働いていますか?まあ、それは私のためではありません。問題は、Builder.addFromFile(filename)を呼び出すときにコードが例外をスローしていたことでした

java.text.ParseException:無効なオブジェクトタイプ `GtkLabel '

エラーは、ツリーの最初の要素に関するものです。徹底的な調査の結果、既知のバグは修正されていないため、使用する前にすべてのウィジェットを事前に定義する必要があることがわかりました。この場合は、

 new Label();

ビルダーを作成する前に。

これは明らかに、このように機能することを意図したものではなく、将来修正される予定です。

この問題の詳細:

java-gnome-developerメーリングリストのスレッド

Java-gnome-hackersメーリングリストのスレッド

これがお役に立てば幸いです...

于 2014-03-27T11:50:13.070 に答える