第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

帶有陰影的 JavaFX 分層布局

帶有陰影的 JavaFX 分層布局

哈士奇WWW 2022-07-14 16:20:50
我正在學習 JavaFX,我正在嘗試創(chuàng)建一個AnchorPane本身包含 3 個以上AnchorPane的內容。目前,我有一個問題,即面板的陰影由于旁邊的面板而被隱藏。所以我需要一些關于如何解決這個問題的建議。我試圖在它們之間創(chuàng)建一個距離,但是我可以看到后面有一個白色層。我試圖改變圖層的 z 順序,似乎沒有用,所以現(xiàn)在在不知道該怎么做 2 小時后,我在這里問。也許有人知道。我的代碼:    DropShadow dropShadow2;    AnchorPane iconPane, menuPane, viewPane;    public static void main(String[] args) {        launch(args);    }    @Override    public void start(Stage primaryStage){        dropShadow2 = new DropShadow();        dropShadow2.setOffsetX(6.0);        dropShadow2.setOffsetY(4.0);        //Main layout        AnchorPane main_layout = new AnchorPane();        //Icon layout (left)        setUpIconLayout();        //Menu layout (center)        setUpMenuLayout();        //View layout (right)        setUpViewLayout();        main_layout.getChildren().addAll(iconPane, menuPane, viewPane);        Scene scene = new Scene(main_layout, 1000, 600);        primaryStage.setTitle("Delivery System Database");        primaryStage.setScene(scene);        primaryStage.show();    }    private void setUpIconLayout() {        iconPane = new AnchorPane();        iconPane.setPrefSize(50,600);        String hexColor_left = "D64550";        iconPane.setStyle("-fx-background-color: #" + hexColor_left);        iconPane.setEffect(dropShadow2);    }    private void setUpMenuLayout() {        menuPane = new AnchorPane();        menuPane.setPrefSize(200,600);        String hexColor_mid = "EA9E8D";        menuPane.setStyle("-fx-background-color: #" + hexColor_mid);        menuPane.setEffect(dropShadow2);        menuPane.setTranslateX(50);    }    private void setUpViewLayout() {        viewPane = new AnchorPane();        viewPane.setPrefSize(700,600);        String hexColor_right = "DAEFB3";        viewPane.setStyle("-fx-background-color: #" + hexColor_right);        viewPane.setEffect(dropShadow2);        viewPane.setTranslateX(250);    }}
查看完整描述

2 回答

?
精慕HU

TA貢獻1845條經驗 獲得超8個贊

子節(jié)點按照它們添加的順序呈現(xiàn),因此以相反的順序添加它們就足夠了:

main_layout.getChildren().addAll(viewPane, menuPane, iconPane);


查看完整回答
反對 回復 2022-07-14
?
慕村9548890

TA貢獻1884條經驗 獲得超4個贊

子節(jié)點按照它們在 children 中出現(xiàn)的順序呈現(xiàn)ObservableList。這意味著索引較高的孩子將呈現(xiàn)在較低索引的孩子之上。因此,示例中的其他節(jié)點覆蓋了陰影。由于您使用AnchorPane的是開發(fā)人員設置的絕對位置,因此一個簡單的解決方法是反轉子列表的順序(如VGR 所示)。


如果您使用的布局也根據(jù)子列表的順序定位其子級,則該解決方案將無法正常工作,例如HBox. 您可以通過設置適當?shù)姆g轉換來解決此問題,但不建議這樣做。相反,您可以設置viewOrder子項的屬性(在 JavaFX 9 中添加)。這個性質:


定義 thisNode在其父級中的渲染和選取順序。


此屬性用于更改其父節(jié)點中節(jié)點的呈現(xiàn)和選取順序,而無需重新排序父節(jié)點的子列表。例如,這可以用作實現(xiàn)透明度排序的更有效方式。為此,應用程序可以將viewOrder每個節(jié)點的值分配給該節(jié)點與查看器之間的計算距離。


children父級將按降序遍歷它viewOrder。這意味著一個較低的孩子viewOrder將在一個較高的孩子面前viewOrder。如果兩個孩子有相同的 ,則父母將按照它們在父母列表中viewOrder出現(xiàn)的順序遍歷它們。children


由于您希望先前的子級呈現(xiàn)在后續(xù)子級之上,您可以簡單地將 設置為列表viewOrder中的索引children。這是一個例子:


import java.util.stream.DoubleStream;

import javafx.application.Application;

import javafx.geometry.Insets;

import javafx.scene.Scene;

import javafx.scene.effect.BlurType;

import javafx.scene.effect.DropShadow;

import javafx.scene.layout.Background;

import javafx.scene.layout.BackgroundFill;

import javafx.scene.layout.HBox;

import javafx.scene.layout.Region;

import javafx.scene.paint.Color;

import javafx.stage.Stage;


public class Main extends Application {


    @Override

    public void start(Stage primaryStage) {

        HBox root = new HBox(createRegions(50.0, 200.0, 700.0));

        root.setPadding(new Insets(0.0, 75.0, 0.0, 0.0));

        for (int i = 0; i < root.getChildren().size(); i++) {

            root.getChildren().get(i).setViewOrder(i);

        }

        primaryStage.setScene(new Scene(root));

        primaryStage.setTitle("ViewOrder Example");

        primaryStage.show();

    }


    private Region[] createRegions(double... prefWidths) {

        return DoubleStream.of(prefWidths).mapToObj(prefWidth -> {

            Region region = new Region();

            region.setMinSize(Region.USE_PREF_SIZE, Region.USE_PREF_SIZE);

            region.setPrefSize(prefWidth, 600.0);

            region.setMaxSize(Region.USE_PREF_SIZE, Region.USE_PREF_SIZE);

            region.setEffect(new DropShadow(BlurType.THREE_PASS_BOX, Color.BLACK, 10.0, 0.0, 6.0, 4.0));

            region.setBackground(new Background(new BackgroundFill(Color.WHITE, null, null)));

            return region;

        }).toArray(Region[]::new);

    }


}

您提到您嘗試的解決方案之一是設置孩子的 Z-Order,但它不起作用。為了設置z坐標工作,您必須在創(chuàng)建Scene. 您可以通過修改上面的示例來測試它:


更改setViewOrder(i)為setTranslateZ(i)。

更改new Scene(root)為new Scene(root, -1.0, -1.0, true)

這具有在 JavaFX 8 中工作的好處。


查看完整回答
反對 回復 2022-07-14
  • 2 回答
  • 0 關注
  • 205 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號