有沒有一種簡單的方法可以防止JavaFX 2.1中的手風琴完全崩潰?我手風琴有幾個條目,但如果用戶點擊活躍的手風琴條目,它會摺疊手風琴。阻止JavaFX中的手風琴坍塌
我大概可以使用鼠標點擊偵聽器來檢查檢查並採取相應的行動,但這種感覺應該比完成更簡單。
有沒有一種簡單的方法可以防止JavaFX 2.1中的手風琴完全崩潰?我手風琴有幾個條目,但如果用戶點擊活躍的手風琴條目,它會摺疊手風琴。阻止JavaFX中的手風琴坍塌
我大概可以使用鼠標點擊偵聽器來檢查檢查並採取相應的行動,但這種感覺應該比完成更簡單。
將偵聽器添加到當前展開的手風琴窗格中,並通過修改其可摺疊屬性來防止它被用戶摺疊。
這裏是一個示例應用程序:
import javafx.application.Application;
import javafx.application.Platform;
import javafx.beans.value.*;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.stage.Stage;
public class AccordionSample extends Application {
public static void main(String[] args) { launch(args); }
@Override public void start(Stage primaryStage) {
// create some titled panes to go in an accordion.
TitledPane adminPane = new TitledPane("Animals",
VBoxBuilder.create().style("-fx-padding: 10").spacing(10).children(
ButtonBuilder.create().text("Zebra").maxWidth(Double.MAX_VALUE).build(),
ButtonBuilder.create().text("Shrew").maxWidth(Double.MAX_VALUE).build()
).build()
);
TitledPane viewPane = new TitledPane("Vegetables",
VBoxBuilder.create().style("-fx-padding: 10").spacing(10).children(
ButtonBuilder.create().text("Eggplant").maxWidth(Double.MAX_VALUE).build(),
ButtonBuilder.create().text("Carrot").maxWidth(Double.MAX_VALUE).build()
).build()
);
// create an accordion, ensuring the currently expanded pane can not be clicked on to collapse.
Accordion accordion = new Accordion();
accordion.getPanes().addAll(adminPane, viewPane);
accordion.expandedPaneProperty().addListener(new ChangeListener<TitledPane>() {
@Override public void changed(ObservableValue<? extends TitledPane> property, final TitledPane oldPane, final TitledPane newPane) {
if (oldPane != null) oldPane.setCollapsible(true);
if (newPane != null) Platform.runLater(new Runnable() { @Override public void run() {
newPane.setCollapsible(false);
}});
}
});
for (TitledPane pane: accordion.getPanes()) pane.setAnimated(false);
accordion.setExpandedPane(accordion.getPanes().get(0));
// layout the scene.
StackPane layout = new StackPane();
layout.setStyle("-fx-padding: 10; -fx-background-color: cornsilk;");
layout.getChildren().add(accordion);
primaryStage.setScene(new Scene(layout));
primaryStage.show();
}
}
使用collapse屬性禁用動畫 – Strassenrenner
這裏是確保手風琴將永遠不會完全崩潰另一種解決方案。與@jewelsea偉大的原始答案的區別很小 - 我不喜歡這樣一個事實,即默認向下的箭頭正從露天手風琴TitledPane的臉上消失,因爲它的「可摺疊」屬性被設置爲false。爲了讓我的界面更加「自然」,我玩了更多。
/* Make sure the accordion can never be completely collapsed */
accordeon.expandedPaneProperty().addListener((ObservableValue<? extends TitledPane> observable, TitledPane oldPane, TitledPane newPane) -> {
Boolean expand = true; // This value will change to false if there's (at least) one pane that is in "expanded" state, so we don't have to expand anything manually
for(TitledPane pane: accordeon.getPanes()) {
if(pane.isExpanded()) {
expand = false;
}
}
/* Here we already know whether we need to expand the old pane again */
if((expand == true) && (oldPane != null)) {
Platform.runLater(() -> {
accordeon.setExpandedPane(oldPane);
});
}
});
現在有許多關於JavaFX的JIRA特徵請求這個[#RT-28141](http://javafx-jira.kenai.com/browse/RT-28141) – drzymala