1

中央にあるタブ ペインの非常に単純なマウス ドラッグを実装しました。マウスのサイズ変更は非常に基本的なもので、うまく機能していませんが、今のところ、タブの境界線をドラッグしてサイズを大きくすることができます。

ここに画像の説明を入力

今、私は問題を見つけました。中央にあるタブのサイズを変更すると、中央の隣にあるコンポーネントが押し戻されず、ユーザーが期待するように自動的に悲鳴が上がり、サイズ変更したコンポーネントの後ろに配置されます。マウスドラッグでメインコンポーネントを拡張するときに、すべてのコンポーネントをプッシュバックするように設定できますか?

4

2 に答える 2

6

ここにいる他の人たちと同じように、SplitPaneクラスを使用して画面の分割を処理することをお勧めします。分割されたペインのサンプル (スクリーンショットに基づく) を次に示します。分割バーの表示が気に入らない場合は、必要に応じて CSS を変更できます。

サンプルコードのスクリーンショット

import javafx.application.Application;
import javafx.geometry.Orientation;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.SplitPane;
import javafx.scene.control.Tab;
import javafx.scene.control.TabPane;
import javafx.scene.control.TextArea;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;


public class FXSplitTabs extends Application{

    @Override
    public void start(Stage stage) throws Exception {
        stage.setTitle("SplitTabs");
        stage.setWidth(700);
        stage.setHeight(500);

        //Setup Center and Right
        TabPaneWrapper wrapper = new TabPaneWrapper(Orientation.HORIZONTAL, .9);
        TabPane centerPane = new TabPane();
        centerPane.getTabs().addAll(generateTab("Tab 1"),generateTab("Tab 2"), generateTab("Tab 3"), generateTab("Tab N"));

        TabPane rightPane = new TabPane();
        rightPane.getTabs().addAll(generateTab("Tab 1"),generateTab("Tab 2"), generateTab("Tab 3"), generateTab("Tab N"));
        SplitPane.setResizableWithParent(rightPane, false);
        wrapper.addNodes(centerPane, rightPane);

        //Add bottom
        TabPane bottomPane = new TabPane();
        bottomPane.getTabs().addAll(generateTab("Tab 1"),generateTab("Tab 2"), generateTab("Tab 3"), generateTab("Tab N"));
        TabPaneWrapper wrapperBottom = new TabPaneWrapper(Orientation.VERTICAL, .7);
        wrapperBottom.addNodes(wrapper.getNode(), bottomPane);

        //Add left
        TabPane leftPane = new TabPane();
        leftPane.getTabs().addAll(generateTab("Tab 1"),generateTab("Tab 2"), generateTab("Tab 3"), generateTab("Tab N"));
        TabPaneWrapper wrapperleft = new TabPaneWrapper(Orientation.HORIZONTAL, .1);
        wrapperleft.addNodes(leftPane, wrapperBottom.getNode());

        Scene myScene = new Scene(wrapperleft.getNode());
        stage.setScene(myScene);
        stage.sizeToScene();
        stage.show();
    }

    public Tab generateTab(String name){
        Tab result = new Tab(name);
        BorderPane content = new BorderPane();
        TextArea text = new TextArea();
        content.setCenter(text);
        result.setContent(content);
        return result;
    }

    public static void main(String[] args){
        FXSplitTabs.launch(args);
    }

    public static class TabPaneWrapper{
        SplitPane split;

        public TabPaneWrapper(Orientation o, double splitLocation){
            split = new SplitPane();

            //Change the CSS (uncomment if using an external css)
            //split.getStylesheets().add("test.css");

            split.setOrientation(o);
            split.setDividerPosition(0, splitLocation);
        }

        public void addNodes(final Node node1, final Node node2){
            //Add to the split pane
            split.getItems().addAll(node1, node2);
        }

        public Parent getNode(){
            return split;
        }
    }

}

また、CSS を使用して仕切りの外観を変更する場合は、上記のコードの CSS 行のコメントtest.cssを外し、基本パッケージにファイルを作成して、css 仕様を挿入します (仕切りを透明にする例を次に示します)。

.split-pane-divider {
   -fx-border-color: transparent;
   -fx-background-color: transparent;
}
于 2013-07-12T15:48:13.047 に答える
3

別の解決策として:

OSGi と Maven に基づく JavaFX 用の新しいリッチ クライアント プラットフォームであるDrombler FXの最初のアーリー アクセス バージョンをリリースしました。

また、探しているもののように思われるDocking Frameworkの初期バージョンも付属しています。

Drombler FX の詳細については、http://puces-blog.blogspot.ch/2012/12/drombler-fx-building-modular-javafx.html をご覧ください

于 2013-07-01T08:18:25.193 に答える