2

コンテキスト: Netbeans プラットフォーム RCP ベースの Lua IDE を設計しています。ユーザーが簡単にファイルを有効/無効にしたり、エイリアスを追加してビルド時にファイルの名前を変更できるようにするビルド システムを実装しました。UI の観点から、ファイルの有効化と無効化を簡素化するために、プロジェクトの論理タブのカスタム ノードの横にチェックボックスを配置する必要があると感じています。

問題: デフォルトのビューはルックアップで CheckableNode を尊重しないため、デフォルトの BeanTreeView を Outline ビューに置き換えたいと考えています。これを行う最善の方法はわかりませんが、私たちが考案した解決策は間違った方法のようです。コンポーネントのサイズが適切に変更されず、ネイティブ BeanTreeView のように起動時にノードが自動展開されません。

実装の詳細: DataObject ノード デリゲートをプロキシする FilterNode を作成しました。また、ルックアップに独自のプロパティ セットを追加し、CheckableNode を実装するクラスを追加しました (したがって、アウトライン ビューの左側にチェックボックスがあります)。

これが現在の外観です。これがまさに私たちが望んでいる外観です。

カスタム論理タブ ビュー

インストールに使用したコードは次のとおりです。

final String PROJECT_LOGICAL_TAB_ID = "projectTabLogical_tc";
    WindowManager.getDefault().invokeWhenUIReady(new Runnable() {
        @Override
        public void run() {
            TopComponent findTopComponent = WindowManager.getDefault().findTopComponent(PROJECT_LOGICAL_TAB_ID);
            if (findTopComponent != null) {
                Component[] components = findTopComponent.getComponents();
                for (Component component : components) {
                    component.setVisible(false);          
                }
                OutlineView myView2 = new OutlineView("Filename");
                Outline outline2 = myView2.getOutline();
                outline2.setRootVisible(false);
                outline2.setTableHeader(null);         
                findTopComponent.add(myView2, BorderLayout.CENTER);
                findTopComponent.revalidate();
                findTopComponent.validate();
                findTopComponent.repaint();
            }


        }
    });

前もって感謝します。

4

2 に答える 2

1

解決策は、invokeWhenUIReady と変換の間の遅延にあります。

        WindowManager.getDefault().invokeWhenUIReady(new Runnable() {
        @Override
        public void run() {                
            RequestProcessor.getDefault().post(new Runnable() {
                @Override
                public void run() {
                    //We must do this in the awt thread
                    SwingUtilities.invokeLater(new Runnable() {
                        @Override
                        public void run() {
                            TopComponent findTopComponent = WindowManager.getDefault().findTopComponent(PROJECT_LOGICAL_TAB_ID); // TODO add your handling code here:
                            findTopComponent.setVisible(false);
                            findTopComponent.removeAll();
                            findTopComponent.setLayout(new BorderLayout());
                            OutlineView myView2 = new OutlineView("Filename");                      
                            Outline outline2 = myView2.getOutline();
                            outline2.setRootVisible(false);
                            outline2.setTableHeader(null);
                            findTopComponent.add(myView2, BorderLayout.CENTER);
                            findTopComponent.setVisible(true);
                            findTopComponent.open();
                            findTopComponent.requestActive();
                        }
                    });
                }
                //This delay is important!
            }, 1000);
        }
    });
于 2012-12-19T03:46:31.113 に答える
1

それは私のために働きます:(win7、Java 7 x64、NB dev(20121214))

public void jbuttonActionPerformance(ActionEvent ev){

    TopComponent findTopComponent = WindowManager.getDefault().findTopComponent("OutlineTopComponent"); // TODO add your handling code here:
   findTopComponent.setVisible(false);
   findTopComponent.removeAll();
   findTopComponent.setLayout(new BorderLayout());

    OutlineView myView2 = new OutlineView("Filename");
    Outline outline2 = myView2.getOutline();
    findTopComponent.add(myView2, BorderLayout.CENTER);

    findTopComponent.setVisible(true);
    findTopComponent.open();findTopComponent.requestActive();
}

ジルカ

于 2012-12-18T19:11:40.940 に答える