TableView 자동 행 높이 크기 조정-JavaFX

데릭

TableView다음 TableColumn과 같이 포함하는 경우 :

private TableColumn<Foo, ObservableList<Foo2>> col;

목록을 멋지게 표시 할 수 있습니다. 그러나 해당 목록의 크기가 증가하면 셀 (및 행)의 크기가 일정하게 유지되므로 일부 셀이 잘립니다. 열의 크기를 수동으로 조정하면 테이블이 행의 높이를 올바르게 변경하여 정상적으로 표시됩니다.

행 / 셀의 높이를 ObservableList어떻게 든 크기에 바인딩해야 합니까? 아니면 사용자 개입없이 테이블이 자동으로 조정되도록하는 더 좋은 방법이 있습니까?

포함 된 예 :

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ContentDisplay;
import javafx.scene.control.Label;
import javafx.scene.control.TableCell;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;
import javafx.util.Callback;

public class CellResizing extends Application {
    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {

        GridPane root = new GridPane();
        ObservableList<MyFoo> list = FXCollections.observableArrayList();
        list.add(new MyFoo());
        list.get(0).foosProperty().get().add(new Foo2("First Item"));

        TableView<MyFoo> table = new TableView<MyFoo>();
        TableColumn<MyFoo, ObservableList<Foo2>> col = new TableColumn<MyFoo, ObservableList<Foo2>>("List");
        col.setCellValueFactory(new PropertyValueFactory<MyFoo, ObservableList<Foo2>>("foos"));
        Callback<TableColumn<MyFoo, ObservableList<Foo2>>, TableCell<MyFoo, ObservableList<Foo2>>> toolTipFactory =
                new Callback<TableColumn<MyFoo, ObservableList<Foo2>>, TableCell<MyFoo, ObservableList<Foo2>>>() {
            @Override
            public TableCell<MyFoo, ObservableList<Foo2>> call(final TableColumn<MyFoo, ObservableList<Foo2>> param) {
                final TableCell<MyFoo, ObservableList<Foo2>> cell = new TableCell<MyFoo, ObservableList<Foo2>>() {
                    @Override
                    public void updateItem(ObservableList<Foo2> item, boolean empty) {
                        super.updateItem(item, empty);
                        if (empty || item == null) {
                            setText(null);
                            setTooltip(null);
                        } else {
                            GridPane grid = new GridPane();
                            int modulus;
                            if (item.size() < 4) {
                                modulus = 1;
                            }
                            else if (item.size() < 9) {
                                modulus = 2;
                            }
                            else {
                                modulus = 3;
                            }
                            for (int i = 0; i < item.size(); ++i) {
                                Label label = new Label();
                                label.setText(item.get(i).toString());
                                grid.add(label, i % modulus, (i % item.size()) / modulus);
                            }
                            setGraphic(grid);
                            setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
                        }
                    }
                };
                return cell;
            }
        };
        col.setCellFactory(toolTipFactory);
        table.getColumns().add(col);

        Button button = new Button("Add to list");      
        button.setOnAction(new EventHandler<ActionEvent>() {            
            @Override
            public void handle(ActionEvent event) {
                list.get(0).foosProperty().get().add(new Foo2("Text"));
            }
        });
        table.setItems(list);

        root.add(button, 0, 0);
        root.add(table, 0, 1);
        primaryStage.setScene(new Scene(root, 300, 250));
        primaryStage.show();
    }
}

클래스 MyFoo + Foo2 :

import javafx.beans.property.ListProperty;
import javafx.beans.property.SimpleListProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.collections.FXCollections;

public class MyFoo {
    private ListProperty<Foo2> foos;

    public MyFoo() {
        foos = new SimpleListProperty<Foo2>(FXCollections.observableArrayList());
    }

    public ListProperty<Foo2> foosProperty() {
        return foos;
    }
}

class Foo2 {
    private StringProperty text;

    public Foo2(String string) {
        text = new SimpleStringProperty(string);
    }

    public StringProperty textProperty() {
        return text;
    }

    @Override
    public String toString() {
        return text.get();
    }

}
데릭

목록 크기가 변경 될 때마다 updateItem이 호출되는 observablelist에 무효화 리스너를 배치하여이 문제를 해결했습니다.

@Override
public void updateItem(ObservableList<Foo2> item, boolean empty) {
    super.updateItem(item, empty);
    if (empty || item == null) {
        setText(null);
        setTooltip(null);
    } else {
        GridPane grid = new GridPane();
        int modulus;
        if (item.size() < 4) {
            modulus = 1;
        }
        else if (item.size() < 9) {
            modulus = 2;
        }
        else {
            modulus = 3;
        }
        for (int i = 0; i < item.size(); ++i) {
            Label label = new Label();
            label.setText(item.get(i).toString());
            grid.add(label, i % modulus, (i % item.size()) / modulus);
        }
        item.addListener(new InvalidationListener() {
            @Override
            public void invalidated(Observable observable) {
                updateItem(item, empty);
            }
        });
        setGraphic(grid);
        setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
    }
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

기존 VBA 매크로 코드를 조정하여 열 지우기, 행 높이 조정 및 열 자동 맞춤

분류에서Dev

창에 맞게 JavaFX tableview 크기 조정

분류에서Dev

자동 크기 조정 마스크 높이 늘이기 제한

분류에서Dev

JavaFX FlowPane 자동 크기 조정

분류에서Dev

JavaFX-FlowPane 자동 크기 조정

분류에서Dev

확장 가능한 텍스트 상자와 일치하도록 행 높이 자동 크기 조정

분류에서Dev

데이터 URI 이미지 크기 조정 (자동 높이)

분류에서Dev

데이터 URI 이미지 크기 조정 (자동 높이)

분류에서Dev

데이터 URI 이미지 크기 조정 (자동 높이)

분류에서Dev

내용에 맞게 <ul> 높이 자동 크기 조정

분류에서Dev

Fancybox 2 : 탭 콘텐츠의 iFrame 높이 자동 크기 조정

분류에서Dev

제목에 따라 UIButton 높이 자동 크기 조정-AutoLayout ON

분류에서Dev

Swift : 셀 내부의 높이 UITextView 자동 크기 조정

분류에서Dev

콘텐츠에 따라 iframe 높이 자동 크기 조정

분류에서Dev

JavaFX 자동 크기 조정 및 자동 위치

분류에서Dev

크기 조정시 JavaFX 레이아웃 동작

분류에서Dev

TableView에서 이미지 크기 조정

분류에서Dev

컨테이너에서 Kendo Grid 행 높이를 동적으로 변경 Kendo 창 크기 조정

분류에서Dev

기존 JavaFX 이미지 크기 조정

분류에서Dev

Android ListView 행 높이의 크기를 조정하는 방법

분류에서Dev

Kendo Grid Excel 내보내기 행 높이의 크기를 자동으로 조정하려면 어떻게합니까?

분류에서Dev

Javafx : SplitPane 크기 조정 자식

분류에서Dev

HTML, 자바 스크립트로 div 높이 크기 조정

분류에서Dev

UITableViewCell 높이 크기 조정

분류에서Dev

HTML 자동 높이 조정

분류에서Dev

<iframe>의 너비와 높이에 따라 콘텐츠 크기 자동 조정

분류에서Dev

WPF 그리드-최소 높이 제약으로 자동 크기 조정

분류에서Dev

동적 높이로 div 내에서 Div 크기 조정

분류에서Dev

UIWebView 자동 높이 크기

Related 관련 기사

  1. 1

    기존 VBA 매크로 코드를 조정하여 열 지우기, 행 높이 조정 및 열 자동 맞춤

  2. 2

    창에 맞게 JavaFX tableview 크기 조정

  3. 3

    자동 크기 조정 마스크 높이 늘이기 제한

  4. 4

    JavaFX FlowPane 자동 크기 조정

  5. 5

    JavaFX-FlowPane 자동 크기 조정

  6. 6

    확장 가능한 텍스트 상자와 일치하도록 행 높이 자동 크기 조정

  7. 7

    데이터 URI 이미지 크기 조정 (자동 높이)

  8. 8

    데이터 URI 이미지 크기 조정 (자동 높이)

  9. 9

    데이터 URI 이미지 크기 조정 (자동 높이)

  10. 10

    내용에 맞게 <ul> 높이 자동 크기 조정

  11. 11

    Fancybox 2 : 탭 콘텐츠의 iFrame 높이 자동 크기 조정

  12. 12

    제목에 따라 UIButton 높이 자동 크기 조정-AutoLayout ON

  13. 13

    Swift : 셀 내부의 높이 UITextView 자동 크기 조정

  14. 14

    콘텐츠에 따라 iframe 높이 자동 크기 조정

  15. 15

    JavaFX 자동 크기 조정 및 자동 위치

  16. 16

    크기 조정시 JavaFX 레이아웃 동작

  17. 17

    TableView에서 이미지 크기 조정

  18. 18

    컨테이너에서 Kendo Grid 행 높이를 동적으로 변경 Kendo 창 크기 조정

  19. 19

    기존 JavaFX 이미지 크기 조정

  20. 20

    Android ListView 행 높이의 크기를 조정하는 방법

  21. 21

    Kendo Grid Excel 내보내기 행 높이의 크기를 자동으로 조정하려면 어떻게합니까?

  22. 22

    Javafx : SplitPane 크기 조정 자식

  23. 23

    HTML, 자바 스크립트로 div 높이 크기 조정

  24. 24

    UITableViewCell 높이 크기 조정

  25. 25

    HTML 자동 높이 조정

  26. 26

    <iframe>의 너비와 높이에 따라 콘텐츠 크기 자동 조정

  27. 27

    WPF 그리드-최소 높이 제약으로 자동 크기 조정

  28. 28

    동적 높이로 div 내에서 Div 크기 조정

  29. 29

    UIWebView 자동 높이 크기

뜨겁다태그

보관