簡體   English   中英

如何在JavaFX中的場景的最大化(不調整大小)上調用函數

[英]How to call functions on Maximize(not resize) of a scene in JavaFX

我可以將ChangeListener添加到場景中,然后在scene.widthProperty()和scene.heightProperty()上調用它,但是當通過“最大化”按鈕最大化窗口時,這將不適用。

像scene.getWindow()一樣訪問窗口時,找不到窗口的onResize屬性

這是我必須根據調整窗口大小來調整表中列的大小的方法。

當整個窗口最大化時,如何使resizeColumns偵聽器添加到其中(不符合scene.widthProperty()或scene.heightProperty()的條件)

        ChangeListener<Object> resizeColumns = new ChangeListener<Object>(){

            @Override
            public void changed(ObservableValue arg0, Object arg1, Object arg2) {
                new Thread() {
                    // runnable for that thread

                    public void run() {
                        Platform.runLater(new Runnable(){
                            public void run() {
                                // what will be ran in gui thread


                                Double width =primaryStage.getWidth();
                                DraftController controller = (DraftController)loader.getController();
                                TableView<Player> teamTable =controller.getTeamTable();
                                centerColumns(width, controller, teamTable);


                                TableView<Player>  top10Table = controller.getTop10Table();

                                AnchorPane anchor = controller.getAnchorPane();
                                centerColumns(anchor.getWidth()+anchor.getWidth()*.04,controller,top10Table);
                            }


                            private void centerColumns(Double width, DraftController controller, TableView<Player> teamTable) {
                                ObservableList<TableColumn<Player, ?>> columnList = teamTable.getColumns();
                                for (int i=0 ; i<columnList.size(); i++){
                                    columnList.get(i).setPrefWidth((width-17)/teamTable.getColumns().size());
                                }
                            }
                        });
                    }
                }.start();

            }

        };

        scene.widthProperty().addListener(resizeColumns);
        scene.heightProperty().addListener(resizeColumns);
        guage: lang-java -->

我的小例子很好地發揮了最大作用:

package org.example;

import javafx.application.Application;
import javafx.beans.InvalidationListener;
import javafx.beans.Observable;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.scene.text.Text;
import javafx.stage.Stage;

public class ResizeScene extends Application {

    @Override
    public void start(final Stage primaryStage) throws Exception {
        final StackPane stack = new StackPane();
        final Text resolution = new Text();
        stack.getChildren().add(resolution);

        final Scene scene = new Scene(stack);
        primaryStage.setScene(scene);

        final InvalidationListener resizeListener = new InvalidationListener() {
            @Override
            public void invalidated(final Observable observable) {
                final double width = scene.getWidth();
                final double height = scene.getHeight();
                resolution.setText(width + " x " + height);
            }
        };
        scene.widthProperty().addListener(resizeListener);
        scene.heightProperty().addListener(resizeListener);

        // Initial Size
        primaryStage.setWidth(800);
        primaryStage.setHeight(600);
        primaryStage.show();
    }

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM