JavaFX 中“Scene”的默认布局管理器是什么?

Bas*_*que 3 java javafx

TableView这是我在JavaFX/ OpenJFX的 Javadoc 中显示的示例代码的版本。(该类Person是一个记录,只读。)

package work.basil.example.jfxexample;

import javafx.application.Application;
import javafx.beans.property.SimpleStringProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.stage.Stage;

import java.util.List;

public class HelloApplication extends Application
{
    @Override
    public void start ( Stage stage )
    {
        TableView < Person > tableViewPersons = new TableView <> ( );
        ObservableList < Person > persons = FXCollections.observableArrayList ( this.fetchPersons ( ) );
        tableViewPersons.setItems ( persons );

        TableColumn < Person, String > firstNameCol = new TableColumn <> ( "First Name" );
        firstNameCol.setCellValueFactory (   ( TableColumn.CellDataFeatures < Person, String > p ) -> new SimpleStringProperty (p.getValue().getFirstName ()));

        TableColumn < Person, String > lastNameCol = new TableColumn <> ( "Last Name" );
        lastNameCol.setCellValueFactory (   ( TableColumn.CellDataFeatures < Person, String > p ) -> new SimpleStringProperty (p.getValue().getLastName ()));

        List < TableColumn < Person, ? > > columns = List.of ( firstNameCol , lastNameCol );  // <--- Adding this line to make explicit the parameterized type of `TableColumn` to resolve the "Unchecked generics" warning.
        tableViewPersons.getColumns ( ).setAll ( columns );

        Scene scene = new Scene ( tableViewPersons , 320 , 240 );
        stage.setTitle ( "JavaFX Example" );
        stage.setScene ( scene );
        stage.show ( );
    }

    private List < Person > fetchPersons ( )
    {
        return List.of (
                new Person ( "William" , "Reed" ) ,
                new Person ( "James" , "Michaelson" ) ,
                new Person ( "Julius" , "Dean" ) );
    }

    public static void main ( String[] args )
    {
        launch ( );
    }
}
Run Code Online (Sandbox Code Playgroud)

该应用程序呈现一个充满表格视图的窗口。调整窗口大小TableView会导致控件也调整大小,以继续填充窗口。

示例 JavaFX 应用程序的屏幕截图,其中包含一个控件,一个填充窗口的 TableView。

本例中的默认布局管理器是什么Scene

Tho*_*ehr 7

JavaFX 中没有布局管理器。Scence API 文档说明了Scene调整大小时的行为方式:

如果使用组作为根,则场景图的内容将被场景的宽度和高度剪切,并且场景大小的更改(如果用户调整舞台大小)不会改变场景图的布局。如果将可调整大小的节点(布局区域或控件)设置为根,则根的大小将跟踪场景的大小,从而导致内容根据需要进行转发。

由于TableView是 a Control,后一种行为就是您得到的和您看到的。