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();
}
}
위한 자바 FX-JIRA에 요청하는 기능이 생겼가 비활성화 생기 – Strassenrenner
는 아코디언이 완전히 붕괴하지 않습니다 확인하는 또 다른 솔루션입니다 : 여기
은 샘플 응용 프로그램입니다. @jewelsea의 위대한 원래 답변과의 차이점은 거의 없습니다. "축소 가능한"속성이 false로 설정되어 있기 때문에 기본 아랫 방향 화살표가 열린 아코디언 TitledPane 얼굴에서 사라 졌다는 사실을 좋아하지 않았습니다. 내 인터페이스에 대해 좀 더 "자연스러운"느낌을주기 위해 조금 더 연주했습니다./* 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);
});
}
});
붕괴 특성을 사용하여이 [# RT-28,141 (http://javafx-jira.kenai.com/browse/RT-28141) – drzymala