표시된 열의 너비가 항상 테이블 자체의 너비와 동일하다는 점에서 TableView
에 대한 사용자 지정 크기 조정 정책을 TableView.CONSTRAINED_RESIZE_POLICY
과 비슷하게 작성했습니다.열 머리글의 구분선을 두 번 클릭했을 때 CustomResizePolicy가 실행되지 않음
크기가 조정되는 테이블이나 사용자가 열을 끌어서 열의 크기를 조정할 때마다 크기 조정 정책이 호출되고 열의 크기가 적절하게 조정됩니다.
그러나 표의 머리글에있는 구분선 중 하나를 두 번 클릭하면 (열의 내용을 "줄 바꿈"하기 위해) 사용자 지정 크기 조정 정책이 트리거되지 않습니다.
결과적으로 열의 너비가 테이블 너비보다 크거나 작을 수 있습니다. 좋지 않습니다.
이 두 번의 클릭을 어떻게 감지하여 내 CustomResizePolicy
이 나중에 전화를 트리거 할 수 있습니까?
import java.util.Locale;
import javafx.application.Application;
import javafx.beans.property.SimpleObjectProperty;
import javafx.collections.FXCollections;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
import javafx.util.Callback;
public class CustomResizeExample extends Application {
@SuppressWarnings("unchecked")
private Parent getContent() {
TableView <Locale> table = new TableView <>(FXCollections.observableArrayList(Locale.getAvailableLocales()));
TableColumn <Locale, String> countryCode = new TableColumn <>("CountryCode");
countryCode.setCellValueFactory(new PropertyValueFactory <>("country"));
TableColumn <Locale, String> language = new TableColumn <>("Language");
language.setCellValueFactory(new PropertyValueFactory <>("language"));
table.getColumns().addAll(countryCode, language);
TableColumn <Locale, Locale> local = new TableColumn <>("Locale");
local.setCellValueFactory(c -> new SimpleObjectProperty <>(c.getValue()));
table.getColumns().addAll(local);
table.setColumnResizePolicy(new CustomResizePolicy());
BorderPane pane = new BorderPane(table);
return pane;
}
@Override
public void start (Stage stage) throws Exception {
stage.setScene(new Scene(getContent(), 800, 400));
stage.show();
}
public static void main (String[] args) {
launch (args);
}
}
@SuppressWarnings ("rawtypes")
class CustomResizePolicy implements Callback <TableView.ResizeFeatures, Boolean> {
@Override
public Boolean call (TableView.ResizeFeatures feature) {
System.out.println ("Called"); //This does not print when the divider is double-clicked.
return TableView.CONSTRAINED_RESIZE_POLICY.call(feature);
}
}
Java 8에서 CustomTableSkin을 (를) 찾을 수 없습니다. 귀하의 게시물을 오해 했습니까? – JoshuaD
@JoshuaD'CustomTableSkin'이 코드에 정의되어 있습니다. – user1803551
Er. 내 Java - openjdk 버전 "1.8.0_151"에서 "TableViewSkin"을 찾을 수 없다는 뜻입니다. "com.sun.javafx.scene.control.TableViewSkin 가져 오기"를 시도 할 때 가져 오기를 확인할 수 없습니다. – JoshuaD