TableView
のカスタムサイズ変更ポリシーは、表示列の幅の合計が常にテーブル自体の幅と等しいという点でTableView.CONSTRAINED_RESIZE_POLICY
に似ています。列のヘッダーの分割線をダブルクリックしたときにCustomResizePolicyがトリガーされない
テーブルのサイズを変更するか、ユーザーが列をドラッグすると、サイズ変更ポリシーが呼び出され、列のサイズが適切に変更されます。
ただし、表のヘッダー内の分割線の1つをダブルクリックすると(列の内容を「縮小ラップ」する)、カスタムサイズ変更ポリシーはトリガされません。
結果として、列の幅の合計がテーブルの幅よりも大きくても小さくても、それは良くありません。
これらのダブルクリックを検出して、後で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"を見つけることができないということです。私が "import com.sun.javafx.scene.control.TableViewSkin"しようとすると、私は "インポートを解決することはできません取得する。 – JoshuaD