JavaFXのTableViewコンポーネント操作ガイド
JavaFXは、クロスプラットフォームなデスクトップアプリケーションおよびリッチインターネットアプリケーション(RIA)を開発するための強力なクライアントサイドアプリケーションプラットフォームです。JavaFXにおけるTableViewはデータを表形式で表示するためのUIコンポーネントであり、SwingのJTableに相当します。この記事ではJavaFXのTableViewコンポーネントの利用方法について詳しく解説し、コード例も提供します。
TableViewの概要
TableViewは複数の列と行を持つデータを表形式で表示するビューです。ユーザーが行と列を使ってデータを閲覧できるだけでなく、データの並び替えやフィルタリング機能も備えています。
基本的な使い方
まず、JavaFX関連のパッケージをインポートする必要があります:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.stage.Stage;
次に、シンプルなTableViewの実装例を示します:
public class TableDisplayDemo extends Application {
@Override
public void start(Stage mainStage) {
// TableViewの生成
TableView<UserData> tableComponent = new TableView<>();
// 列の定義
TableColumn userNameColumn = new TableColumn<>("氏名");
userNameColumn.setCellValueFactory(new PropertyValueFactory<>("userName"));
TableColumn userAgeColumn = new TableColumn<>("年齢");
userAgeColumn.setCellValueFactory(new PropertyValueFactory<>("userAge"));
// 列をTableViewに追加
tableComponent.getColumns().addAll(userNameColumn, userAgeColumn);
// データをTableViewに設定
tableComponent.getItems().addAll(
new UserData("山田太郎", 25),
new UserData("佐藤花子", 32),
new UserData("鈴木一郎", 28)
);
// シーンの作成とステージ設定
Scene displayScene = new Scene(tableComponent, 400, 300);
mainStage.setTitle("TableView デモ");
mainStage.setScene(displayScene);
mainStage.show();
}
public static void main(String[] arguments) {
launch(arguments);
}
static class UserData {
private final String userName;
private final int userAge;
public UserData(String name, int age) {
this.userName = name;
this.userAge = age;
}
public String getUserName() {
return userName;
}
public int getUserAge() {
return userAge;
}
}
}
高度な機能
単純なデータ表示に加えて、TableViewはソート機能やフィルタリング機能などの高度な機能もサポートしています。例えば、各列にカスタム比較ロジックを追加してソート機能を実現できます:
userNameColumn.setComparator((data1, data2) ->
data1.getUserName().compareTo(data2.getUserName()));
userAgeColumn.setComparator((data1, data2) ->
Integer.compare(data1.getUserAge(), data2.getUserAge()));
さらに、TableViewにはカスタムセルレンダラーを追加することで、より複雑なデータ表示ロジックを実装することも可能です。