我正在编写一个小型配置向导式JavaFX应用程序。我想强制用户完成配置窗格的不同步骤。所以我选择了一个带有几个面板的手风琴容器。用户只能进入NEXT或PREVIOUS手风琴面板,但不能从面板1跳到3。
我通过在手风琴下添加“上一个”和“下一个”按钮来实现这一点,并将手风琴的鼠标透明度设置为true。到目前为止一切正常。用户可以从面板1到5然后返回......
不幸的是(由于任何奇怪的原因)用户无法在不同的面板中配置任何内容。等等......我将鼠标透明度设置为“true”,正确...但是当我将其设置为false时,用户可以跳过面板而无需任何顺序。
有什么建议吗?
答案 0 :(得分:2)
一种可能的方法是将所有窗格的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
,使用当前的&#34;向导页面&#34;在中间以及底部的下一个和上一个按钮。如果需要,您也可以添加面包屑跟踪。