2016-09-26 8 views
0

私は小さな構成ウィザードスタイルのJavaFXアプリケーションを作成しています。私は、ユーザーに構成ペインの異なるステップを強制したいと思います。だから私はいくつかのパネルでアコーデオンコンテナを選んだ。ユーザーはNEXTまたはPREVIOUSアコーデオンパネルに進むことが許可されていますが、パネル1から3にジャンプすることはできません。Wizard with JavaFX Accordions

アコーディオンの下に「Previous」と「Next」ボタンを追加しました。アコーディオンのマウス透過性これまではすべてうまく動作します。ユーザーはパネル1から5まで歩くことができます。

残念なことに(奇妙な理由で)ユーザーは別のパネル内で何も設定することはできません。私はマウスの透明度を "true"に設定しました。しかし、私はそれをfalseに設定すると、ユーザーは順不同でパネルを飛び越えることができます。

提案がありますか?

+0

それぞれの 'TitledPane'を' true'に設定しようとしましたか? –

答えて

2

可能な方法の1つは、すべてのペインのcollapsibleプロパティをfalseに設定し、プログラムを使用して展開または折りたたむ必要があるときに、それぞれをtrueに設定することです。これは少し醜いですが、ここでの例です:

import javafx.application.Application; 
import javafx.beans.property.ObjectProperty; 
import javafx.beans.property.SimpleObjectProperty; 
import javafx.geometry.Insets; 
import javafx.geometry.Pos; 
import javafx.scene.Node; 
import javafx.scene.Parent; 
import javafx.scene.Scene; 
import javafx.scene.control.Accordion; 
import javafx.scene.control.Button; 
import javafx.scene.control.Label; 
import javafx.scene.control.TitledPane; 
import javafx.scene.layout.BorderPane; 
import javafx.scene.layout.HBox; 
import javafx.stage.Stage; 

public class AccordionBasedWizard extends Application { 

    @Override 
    public void start(Stage primaryStage) { 
     Accordion accordion = new Accordion(); 

     for (int i = 0 ; i < 5 ; i++) { 
      TitledPane pane = new TitledPane("Page "+(i+1), new Label("Wizard page "+(i+1))); 
      accordion.getPanes().add(pane); 
      pane.setCollapsible(false); 
     } 


     accordion.setExpandedPane(accordion.getPanes().get(0)); 

     Button previousButton = new Button("Previous"); 
     previousButton.disableProperty().bind(accordion.expandedPaneProperty().isEqualTo(accordion.getPanes().get(0))); 
     previousButton.setOnAction(e -> { 
      TitledPane current = accordion.getExpandedPane(); 
      int index = accordion.getPanes().indexOf(current); 
      TitledPane previous = accordion.getPanes().get(index - 1); 
      current.setCollapsible(true); 
      previous.setCollapsible(true); 
      accordion.setExpandedPane(previous); 
      previous.setCollapsible(false); 
      current.setCollapsible(false); 
     }); 

     Button nextButton = new Button("Next"); 
     nextButton.disableProperty().bind(accordion.expandedPaneProperty().isEqualTo(accordion.getPanes().get(accordion.getPanes().size()-1))); 
     nextButton.setOnAction(e -> { 
      TitledPane current = accordion.getExpandedPane(); 
      int index = accordion.getPanes().indexOf(current); 
      TitledPane next = accordion.getPanes().get(index + 1); 
      current.setCollapsible(true); 
      next.setCollapsible(true); 
      accordion.setExpandedPane(next); 
      next.setCollapsible(false); 
      current.setCollapsible(false); 
     }); 

     HBox buttons = new HBox(5, previousButton, nextButton); 
     buttons.setAlignment(Pos.CENTER); 
     buttons.setPadding(new Insets(5)); 

     BorderPane root = new BorderPane(accordion); 
     root.setBottom(buttons); 

     primaryStage.setScene(new Scene(root, 400, 400)); 
     primaryStage.show(); 
    } 


    public static void main(String[] args) { 
     launch(args); 
    } 
} 
何が価値がある、私はおそらくウィザードとして Accordionを使用しようとしないだろう、とちょうど現在の「ウィザードページで、 BorderPaneを使用するために

中央のボタンと、下の次のボタンと前のボタンに表示されます。必要に応じて、ブレッドクラムのトレイルを追加することもできます。

+0

10の10ポイント!ありがとうございます。そして最後にあなたの提案も正しいです。それは私のアプリに合っていません(私は6つの "メイン"ページを持っていて、それぞれ1つのアコーディオンに4-5のサブペインがあります)。アコーデオンのすぐに使えるすべての効果が好きなので、私は実際にあなたの「回避策」を使用します。 – Sauer

関連する問題