Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何控制JavaFX标题窗格的重叠扩展_Javafx - Fatal编程技术网

如何控制JavaFX标题窗格的重叠扩展

如何控制JavaFX标题窗格的重叠扩展,javafx,Javafx,有人知道如何配置JavaFX标题窗格,使其扩展总是在前台进行吗?与组合框按钮的扩展一样。 当包含标题窗格的面板区域小于展开区域时,展开发生在侵入区域的后面。如何在被入侵地区面前做到这一点。 示例代码显示了这个场景。我希望的功能可以通过使用包含按钮的组合框按钮来实现,但是我喜欢在标题窗格扩展中创建的效果,并且希望交替使用它。 先谢谢你 import javafx.application.Application; import javafx.event.ActionEvent; import jav

有人知道如何配置JavaFX标题窗格,使其扩展总是在前台进行吗?与组合框按钮的扩展一样。 当包含标题窗格的面板区域小于展开区域时,展开发生在侵入区域的后面。如何在被入侵地区面前做到这一点。 示例代码显示了这个场景。我希望的功能可以通过使用包含按钮的组合框按钮来实现,但是我喜欢在标题窗格扩展中创建的效果,并且希望交替使用它。 先谢谢你

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TitledPane;
import javafx.scene.layout.Border;
import javafx.scene.layout.BorderStroke;
import javafx.scene.layout.BorderStrokeStyle;
import javafx.scene.layout.BorderWidths;
import javafx.scene.layout.CornerRadii;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

public class Main extends Application {
  @Override
  public void start(Stage primaryStage) {
    try {
      TitledPane titledPane = new TitledPane();
      titledPane.setPrefWidth(180);
      titledPane.setBorder(new Border(new BorderStroke(Color.MAGENTA, BorderStrokeStyle.SOLID, CornerRadii.EMPTY, new BorderWidths(1))));

      Button btnSave = new Button();
      btnSave.setPrefWidth(180);
      btnSave.setText("Save");
      btnSave.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent event) {
          titledPane.setExpanded(false);
        }
      });

      Button btnLeftSend = new Button();
      btnLeftSend.setPrefWidth(180);
      btnLeftSend.setText("Sent to Left");
      btnLeftSend.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent event) {
          titledPane.setExpanded(false);
        }
      });

      Button btnRightSend = new Button();
      btnRightSend.setPrefWidth(180);
      btnRightSend.setText("Sent to right");
      btnRightSend.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent event) {
          titledPane.setExpanded(false);
        }
      });

      VBox buttons = new VBox(3);
      buttons.setPrefWidth(180);
      buttons.getChildren().addAll(btnSave, btnLeftSend, btnRightSend);

      titledPane.setAnimated(true);
      titledPane.setText("Options");
      titledPane.setContent(buttons);
      titledPane.setExpanded(false);

      Button btnLine1 = new Button();
      btnLine1.setPrefWidth(180);
      btnLine1.setText("Force expand");
      btnLine1.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent event) {
          titledPane.setExpanded(true);
        }
      });

      HBox line1 = new HBox(5);
      line1.setPadding(new Insets(5, 0, 0, 0));
      line1.setAlignment(Pos.TOP_CENTER);
      line1.setMaxSize(380, 40);
      line1.setMinSize(380, 40);
      line1.setPrefSize(380, 40);
      line1.setBorder(new Border(new BorderStroke(Color.BLUE, BorderStrokeStyle.SOLID, CornerRadii.EMPTY, new BorderWidths(1))));
      line1.getChildren().addAll(btnLine1, titledPane);

      Button btnLine2 = new Button();
      btnLine2.setPrefWidth(180);
      btnLine2.setText("Force shrink");
      btnLine2.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent event) {
          titledPane.setExpanded(false);
        }
      });

      HBox line2 = new HBox(5);
      line2.setPadding(new Insets(5, 0, 0, 0));
      line2.setAlignment(Pos.TOP_CENTER);
      line2.setMaxSize(380, 40);
      line2.setMinSize(380, 40);
      line2.setPrefSize(380, 40);
      line2.setBorder(new Border(new BorderStroke(Color.RED, BorderStrokeStyle.SOLID, CornerRadii.EMPTY, new BorderWidths(1))));
      line2.getChildren().add(btnLine2);

      VBox layout = new VBox(5);
      layout.setPadding(new Insets(5));
      layout.getChildren().addAll(line1, line2);

      Scene scene = new Scene(layout, 390, 160);
      scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
      scene.setFill(Color.GHOSTWHITE);

      primaryStage.setTitle("Sample code for StackOverFlow");
      primaryStage.setScene(scene);
      primaryStage.show();

    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  public static void main(String[] args) {
    launch(args);
  }
}

节点的z顺序由节点添加到其父节点的顺序控制。当然,如果使用VBox,此顺序还将确定节点在VBox中的位置。例如,考虑使用网格窗格,以便可以独立于添加子节点的顺序来控制位置。然后,只需在添加第2行之后添加第1行:


非常感谢你的回复。在我的应用程序中,我用GridPane替换了VBox,它按照我的要求工作。 为了帮助其他有同样问题的人,按照James_D的建议修改代码

package application;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TitledPane;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class Main extends Application {
  @Override
  public void start(Stage primaryStage) {
    try {
      TitledPane titledPane = new TitledPane();
      titledPane.setPrefWidth(180);

      Button btnSave = new Button();
      btnSave.setPrefWidth(180);
      btnSave.setText("Save");
      btnSave.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent event) {
          titledPane.setExpanded(false);
        }
      });

      Button btnLeftSend = new Button();
      btnLeftSend.setPrefWidth(180);
      btnLeftSend.setText("Sent to Left");
      btnLeftSend.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent event) {
          titledPane.setExpanded(false);
        }
      });

      Button btnRightSend = new Button();
      btnRightSend.setPrefWidth(180);
      btnRightSend.setText("Sent to right");
      btnRightSend.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent event) {
          titledPane.setExpanded(false);
        }
      });

      VBox buttons = new VBox(3);
      buttons.setPrefWidth(180);
      buttons.getChildren().addAll(btnSave, btnLeftSend, btnRightSend);

      titledPane.setAnimated(true);
      titledPane.setText("Options");
      titledPane.setContent(buttons);
      titledPane.setExpanded(false);

      Button btnLine1 = new Button();
      btnLine1.setPrefWidth(180);
      btnLine1.setText("Force expand");
      btnLine1.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent event) {
          titledPane.setExpanded(true);
        }
      });

      HBox line1 = new HBox(5);
      line1.setPadding(new Insets(5, 0, 0, 0));
      line1.setAlignment(Pos.TOP_CENTER);
      line1.setMaxSize(380, 40);
      line1.setMinSize(380, 40);
      line1.setPrefSize(380, 40);
      line1.getChildren().addAll(btnLine1, titledPane);

      Button btnDummy = new Button();
      btnDummy.setPrefWidth(365);
      btnDummy.setText("Anything here. Just an example");

      HBox line2 = new HBox(5);
      line2.setPadding(new Insets(5, 0, 0, 0));
      line2.setAlignment(Pos.TOP_CENTER);
      line2.setMaxSize(380, 40);
      line2.setMinSize(380, 40);
      line2.setPrefSize(380, 40);
      line2.getChildren().add(btnDummy);

      GridPane layout = new GridPane();
      layout.setVgap(5);
      layout.setPadding(new Insets(5));
      layout.add(line2, 0, 1);
      layout.add(line1, 0, 0);

      Scene scene = new Scene(layout, 390, 160);
      primaryStage.setTitle("Sample code for StackOverFlow");
      primaryStage.setScene(scene);
      primaryStage.show();

    } catch(Exception e) {
      e.printStackTrace();
    }
  }

  public static void main(String[] args) {
    launch(args);
  }
}
package application;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TitledPane;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class Main extends Application {
  @Override
  public void start(Stage primaryStage) {
    try {
      TitledPane titledPane = new TitledPane();
      titledPane.setPrefWidth(180);

      Button btnSave = new Button();
      btnSave.setPrefWidth(180);
      btnSave.setText("Save");
      btnSave.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent event) {
          titledPane.setExpanded(false);
        }
      });

      Button btnLeftSend = new Button();
      btnLeftSend.setPrefWidth(180);
      btnLeftSend.setText("Sent to Left");
      btnLeftSend.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent event) {
          titledPane.setExpanded(false);
        }
      });

      Button btnRightSend = new Button();
      btnRightSend.setPrefWidth(180);
      btnRightSend.setText("Sent to right");
      btnRightSend.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent event) {
          titledPane.setExpanded(false);
        }
      });

      VBox buttons = new VBox(3);
      buttons.setPrefWidth(180);
      buttons.getChildren().addAll(btnSave, btnLeftSend, btnRightSend);

      titledPane.setAnimated(true);
      titledPane.setText("Options");
      titledPane.setContent(buttons);
      titledPane.setExpanded(false);

      Button btnLine1 = new Button();
      btnLine1.setPrefWidth(180);
      btnLine1.setText("Force expand");
      btnLine1.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent event) {
          titledPane.setExpanded(true);
        }
      });

      HBox line1 = new HBox(5);
      line1.setPadding(new Insets(5, 0, 0, 0));
      line1.setAlignment(Pos.TOP_CENTER);
      line1.setMaxSize(380, 40);
      line1.setMinSize(380, 40);
      line1.setPrefSize(380, 40);
      line1.getChildren().addAll(btnLine1, titledPane);

      Button btnDummy = new Button();
      btnDummy.setPrefWidth(365);
      btnDummy.setText("Anything here. Just an example");

      HBox line2 = new HBox(5);
      line2.setPadding(new Insets(5, 0, 0, 0));
      line2.setAlignment(Pos.TOP_CENTER);
      line2.setMaxSize(380, 40);
      line2.setMinSize(380, 40);
      line2.setPrefSize(380, 40);
      line2.getChildren().add(btnDummy);

      GridPane layout = new GridPane();
      layout.setVgap(5);
      layout.setPadding(new Insets(5));
      layout.add(line2, 0, 1);
      layout.add(line1, 0, 0);

      Scene scene = new Scene(layout, 390, 160);
      primaryStage.setTitle("Sample code for StackOverFlow");
      primaryStage.setScene(scene);
      primaryStage.show();

    } catch(Exception e) {
      e.printStackTrace();
    }
  }

  public static void main(String[] args) {
    launch(args);
  }
}