EVERYフォームナビゲーションからコードネームつの新しいGUIビルダーバックコマンド

C. Javaの:

私は、新しいGUIビルダーでフォーム間を移動しています。古いものは持っていたback、デフォルトですべてのフォーム上のボタンを。

どのように私は有効かback、あらゆる形で私は新しい形でナビゲートするたびに、新しいGUIビルダーのボタンを?theme.resの定数を通じてしようとしました。それはまだ、デフォルトで有効になっていません。

さらに、この方法「新しいform1.showは、」フォーム間をナビゲートするための最良の方法ですか?(参照符号)

名前のファイルと仮定すると:

Main.java, myapplication.java, Form1 ,Form2 ,Form3 

名前を想定したナビゲーションのためのコード、button1およびForm3

public void onbutton1ActionEvent(com.codename1.ui.events.ActionEvent ev) {
        new Form3().show();   
    }

Back 古いGUIビルダーからのコマンドは、ここで働いていません。

 public Form showForm(String resourceName, Command sourceCommand) {
        try {
            Form f = (Form)formNameToClassHashMap.get(resourceName).newInstance();
            Form current = Display.getInstance().getCurrent();
            if(current != null && isBackCommandEnabled() && allowBackTo(resourceName)) {
                f.putClientProperty("previousForm", current);
                setBackCommand(f, new Command(getBackCommandText(current.getTitle())) {
                    public void actionPerformed(ActionEvent evt) {
                          back(null);
                    }
                });
            }
            if(sourceCommand != null && current != null && current.getBackCommand() == sourceCommand) {
                f.showBack();
            } else {
                f.show();
            }
            return f;
        } catch(Exception err) {
            err.printStackTrace();
            throw new RuntimeException("Form not found: " + resourceName);
        }
    }

私はもう試した:

  form.setBackCommand(cmd);

public Command setBackCommand(String title, ActionListener<ActionEvent> listener)
public void setBackCommand(Command cmd)
public Command setBackCommand(String title, BackCommandPolicy policy, ActionListener<ActionEvent> listener)
public void setBackCommand(Command cmd, BackCommandPolicy policy)
    boolean onBack() {
            return true;
        }

https://www.codenameone.com/blog/toolbar-back-easier-material-icons.htmlmain.javamyapplication.javaコマンドを受け付けませんでした。

Form3.getToolbar().setBackCommand("", e -> Form3.showBack());

althouthは唯一たForm3のために働くべきではありませんが、すべてのフォーム。

どちらか動作しませんでした。私たちはさまざまな形式から、各フォームに移動する可能性があるため、すべてのsidemenuの「裏コマンド」を置くことは、理想的なソリューションではありません。

EXTRA:私はそれぞれの新しいフォームのツールバーのコードを貼り付けコピーしないように、すべての形態のためのグローバルツールバーとグローバルコマンドを有効にする方法は、ありますか?ここで答えていない場合は、私は新しいスレッドを作るかもしれません。

ありがとうございました。

シャイアルモグ:

それはノキアは、携帯電話業界で世界のリーダーだったと4インチデバイスが大と考えられていた時に設計されていたとして、古いGUIビルダは、ナビゲーションを処理していました。当時、私たちは、UIは、各フォームのために簡単だったとナビゲーションが難しい部分だったと仮定しました。

これが変更されました。しかし、ほとんどの開発者のための大きな問題は、デザインと機能性の両方の問題の多くを引き起こしたステートレスなナビゲーションの概念でした。

新しいGUIビルダーは、任意のナビゲーションコードまたは任意のグローバルコードが含まれていません。各フォームには独自の上に立ちます。

あなただけのフォームのインスタンスを維持し、例えばにナビゲートするフォームを示すことによって、あなた自身のステートマシンを実装することができますことを言いました:

public static class Controller { 
    private static Form1 f1;
    private static Form2 f2;


    public static void showF1() {
         if(f1 == null) f1 = new Form1();
         f1.show();
    }

    // etc...
}

私は簡単にするため、静的なコンテキストを使用していますが、独自の戦略を実施することができます。あなたはまた、例えばのような機能として、ツールバーを追加し、ここでグローバルなロジックを挿入できることに注意してください:

 private static void initForm(Form f) {
    // add global commands to the toolbar
 }

また、あなたの継承を制限するものではありません新しいGUIビルダーのような共通の基本クラスからのすべてのフォームを導き出すことができます。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=208861&siteId=1