Javafx Stackpane показывает аналогичный CardLayout Java Swing

Я использую три кнопки для отображения каждой дочерней панели в области стека, но когда я нажимаю кнопку, она отображает разные панели для каждого клика.

Пример

btn0-> панель 0, панель 1 и панель 2

btn1-> панель 0, панель 1 и панель 2

btn2-> панель 0, панель 1 и панель 2

Я просто хочу, чтобы он отображал определенную панель для определенных кнопок в java Swing CardLayout, что мне делать?

btn0-> панель 0

btn1-> панель 1

btn2-> панель 2

Пожалуйста помогите!

@FXML
void btn0(ActionEvent event) {
    stackConsole.getChildren().get(0).toFront();
}

@FXML
void btn1(ActionEvent event) {
    stackConsole.getChildren().get(1).toFront();
}

@FXML
void btn2(ActionEvent event) {
    stackConsole.getChildren().get(2).toFront();
}

person Ma Tâm    schedule 16.10.2016    source источник
comment
больше ответов здесь: stackoverflow.com/questions/8309802/   -  person pdem    schedule 15.12.2017


Ответы (1)


В зависимости от ваших потребностей вас может заинтересовать класс TabPane.

Конечно, реализуйте аналогичную функциональность в классе контроллера. Однако вызов toFront() для ребенка не будет иметь желаемого эффекта, поскольку

  1. Все дети остаются в stackConsole
  2. toFront просто перемещает Node, для которого он вызывается, в последнюю дочернюю позицию родителя.

Однако то, чего вы пытаетесь достичь, похоже, заменяет детей stackConsole. Это можно сделать, внедрив различные дочерние элементы в класс контроллера и используя ObservableList.setAll для замены содержимого. Тег <fx:define> можно использовать для детей, изначально не показанных в сцене.

Пример

FXML

<BorderPane xmlns="http://javafx.com/javafx/8.0.60" xmlns:fx="http://javafx.com/fxml/1" fx:controller="fxml.ReplaceController">
    <center>
        <StackPane fx:id="stackConsole">
            <children>
                <!-- use multiply blend mode to demonstrate other children are not present
                     (result would be black otherwise) -->
                <Region fx:id="r0" blendMode="MULTIPLY" prefHeight="200.0" prefWidth="200.0" style="-fx-background-color: red;" />
                <fx:define>
                    <Region fx:id="r1" blendMode="MULTIPLY" prefHeight="200.0" prefWidth="200.0" style="-fx-background-color: blue;" />
                    <Region fx:id="r2" blendMode="MULTIPLY" prefHeight="200.0" prefWidth="200.0" style="-fx-background-color: green;" />
                </fx:define>
            </children>
        </StackPane>
    </center>
    <left>
        <VBox prefHeight="200.0" spacing="10.0" BorderPane.alignment="CENTER">
            <children>
                <Button mnemonicParsing="false" text="1" onAction="#btn0"  />
                <Button mnemonicParsing="false" text="2" onAction="#btn1" />
                <Button mnemonicParsing="false" text="3" onAction="#btn2" />
            </children>
            <padding>
                <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
            </padding>
        </VBox>
    </left>
</BorderPane>

Контроллер

public class ReplaceController {
    @FXML
    private Region r1;
    @FXML
    private Region r2;
    @FXML
    private Region r0;
    @FXML
    private Pane stackConsole;

    @FXML
    private void btn0(ActionEvent event) {
        stackConsole.getChildren().setAll(r0);
    }

    @FXML
    private void btn1(ActionEvent event) {
        stackConsole.getChildren().setAll(r1);
    }

    @FXML
    private void btn2(ActionEvent event) {
        stackConsole.getChildren().setAll(r2);
    }
    
}
person fabian    schedule 16.10.2016
comment
Спасибо fabian. Если вы хотите, чтобы вы могли помочь мне с проблемами позже, это слишком сложно для меня ="скрыть и показать разделенную панель с веб-просмотром javafx"> stackoverflow.com/questions/40210296/ - person Ma Tâm; 24.10.2016