Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/k7t3/dynamictableview
動的に列数を変更するコントロール
https://github.com/k7t3/dynamictableview
java javafx
Last synced: about 2 months ago
JSON representation
動的に列数を変更するコントロール
- Host: GitHub
- URL: https://github.com/k7t3/dynamictableview
- Owner: k7t3
- License: apache-2.0
- Created: 2022-01-03T09:38:37.000Z (about 3 years ago)
- Default Branch: master
- Last Pushed: 2022-09-19T14:45:47.000Z (over 2 years ago)
- Last Synced: 2024-10-13T18:41:34.497Z (3 months ago)
- Topics: java, javafx
- Language: Java
- Homepage:
- Size: 195 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
DynamicTableView
==========[![Java CI](https://github.com/k7t3/DynamicTableView/actions/workflows/test.yaml/badge.svg)](https://github.com/k7t3/DynamicTableView/actions/workflows/test.yaml)
[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)幅に応じて動的に列数を変更するJavaFXコントロールです。
![sample](https://user-images.githubusercontent.com/33083609/151005827-ff90e37a-73ad-4656-8808-bf62d968e48e.gif)
コントロールではありませんが、同様のレイアウトを表現できるFlowPaneと比較すると
以下のような特徴があります。
* VirtualFlowによる効率的な描画
* SelectionModelを利用することによる要素の選択ロジックこれらの特徴は内部的にTableViewを利用することで実装しています。
## How to use
OpenJFX 11以上で動作します。Maven Central Repository
```groovy
implementation group: 'io.github.k7t3', name: 'DynamicTableView', version: 'X.X.X'
```DynamicTableViewコントロールの利用方法は以下の通り、要素を追加することで表示されます。
```java
DynamicTableView tableView = new DynamicTableView<>();
tableView.getItems().addAll(
"apple",
"lemon",
"orange",
"raspberry",
"cherry",
"banana",
"peach",
"strawberry",
"pineapple"
);
```DynamicTableViewに任意のNodeを表示させるには、DynamicTableCellを継承したクラスを作成します。
```java
class BaseballTeamCell extends DynamicTableCell {public BaseballTeamCell() {
super();
}private Label teamName;
private ImageView teamImage;@Override
protected Node createView() {
teamName = new Label();
teamImage = new ImageView();
teamImage.setPreserveRatio(true);
teamImage.fitWidthProperty().bind(prefCellWidthProperty().multiply(0.8));
teamImage.fitHeightProperty().bind(prefCellHeightProperty().multiply(0.8));BorderPane layout = new BorderPane();
layout.setTop(teamName);
layout.setCenter(teamImage);
return layout;
}@Override
protected void updateItem(BaseballTeam item) {
teamName.setText(item.getName());
teamImage.setImage(item.getImage());
}
}
```作成したセルクラスを生成するセルファクトリを指定することでカスタムセルが利用できます。
```java
DynamicTableView tableView = new DynamicTableView<>();
// セルファクトリを指定
tableView.setCellFactory(BaseballTeamCell::new);
tableView.setCellWidth(200);
tableView.setCellHeight(200);
tableView.getItems().addAll(getAllProfessionalTeams());
```## 既知の不具合
OpenJFX 17にて、複数選択しているセルを再度クリックすることで以下の例外が標準出力にプリントされます。
```text
Exception in thread "JavaFX Application Thread" java.lang.IllegalArgumentException: fromIndex(0) > toIndex(-1)
```これは
[OpenJDKのBTS](https://bugs.openjdk.java.net/browse/JDK-8273324 "IllegalArgumentException: fromIndex(0) > toIndex(-1) after clear and select TableCell")
に既に報告されており、OpenJFX 18で修正されるようです。## Licence
Copyright 2022 k7t3
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.