2つのテーブルビューを同期してスクロールするようにバインドします。それ、どうやったら出来るの?私はテーブルビューのスクロールバーにアクセスする方法を見つけることができません。2つのテーブルビューを同期してスクロールさせるようにバインドする
答えて
これは現在考えられていません。 TableViewSkinは、VirtualFlowフィールドを持つVirtualContainerBaseから継承します。 VirtualFlowオブジェクトには、2つのVirtualScrollBarフィールドhbarとvbarがあります。私はそれに到達する方法を見ることができません。
興味深いことに、これはプライベートですが、TableViewにはプライベートcontentWidthフィールドもあります。私は、JFXチームが理解できないAPIをあまりにも多く開くことに非常に慎重であると確信しています。 contentWidthフィールドをJFX JIRAまたはopenjfx-devメーリングリストの機能リクエストとしてintプロパティとしてオープンするように要求することができます。
ストップギャップ指標は、テーブルビュー選択モデルの選択された項目またはインデックスプロパティをバインドすることです。
外部のスクロールバーでTableviewをバインドするためのCSSハックを作成しました。 1つのスクロールバーが両方のテーブルビューを制御します。
私の考えの概要:
- 2 tableviews
- を作成して1つの垂直スクロールバーを作成します。 myScrollbarの値は、両方のテーブルビューのscrollTo(int)を呼び出して変更すると
- )さんは、最小= 0、最大= TableView.Items.size(の大きさにmyScrollbarの最小値と最大値を設定し
- この例ではmyScrollbarそれを呼ぶことにしましょうfunction
- CSSで実装されたテーブルビューのネイティブの垂直スクロールバーを無効にします。
これは2つのテーブルを提供し、どちらも外部スクロールバー(myScrollbar)で制御されます。ここで
は、CSSを使用してテーブルビューのスクロールバーを非表示にするコードです:
/* The main scrollbar **track** CSS class */
.mytableview .scroll-bar:vertical .track{
-fx-padding:0px;
-fx-background-color:transparent;
-fx-border-color:transparent;
-fx-background-radius: 0em;
-fx-border-radius:2em;
}
/* The increment and decrement button CSS class of scrollbar */
.mytableview .scroll-bar:vertical .increment-button ,
.mytableview .scroll-bar:vertical .decrement-button {
-fx-background-color:transparent;
-fx-background-radius: 0em;
-fx-padding:0 0 0 0;
}
.mytableview .scroll-bar:vertical .increment-arrow,
.mytableview .scroll-bar:vertical .decrement-arrow
{
-fx-shape: " ";
-fx-padding:0;
}
/* The main scrollbar **thumb** CSS class which we drag every time (movable) */
.mytableview .scroll-bar:vertical .thumb {
-fx-background-color:transparent;
-fx-background-insets: 0, 0, 0;
-fx-background-radius: 2em;
-fx-padding:0px;
}
その後、我々は、スクロールバーを使って、テーブルビューをスクロールする方法を設定する必要があります。
scroll.setMax(100); //make sure the max is equal to the size of the table row data.
scroll.setMin(0);
scroll.valueProperty().addListener(new ChangeListener(){
@Override
public void changed(ObservableValue ov, Number t, Number t1) {
//Scroll your tableview according to the table row index
table1.scrollTo(t1.intValue());
table2.scrollTo(t1.intValue());
}
});
http://blog.ngopal.com.np/2012/09/25/how-to-bind-vertical-scroll-in-multi-tableview/
ソリューションはすばらしく見えます。私はあなたに恩恵を与えるだろうスタックのオーバーフローでアーカイブされているように投稿としてそれを書いてください。 –
thanks..and cheers :) – privatejava
私は問題を解決するために見つけた最も簡単な方法は、目に見えるのvalueProperty AN隠されたスクロールバーをバインドすることです。
// Application
private MyController controller;
@Override
public void start(Stage primaryStage) {
try {
FXMLLoader fxmlLoader = new FXMLLoader(SalesApp.class.getResource("scene.fxml"));
BorderPane root = (BorderPane) fxmlLoader.load();;
Scene scene = new Scene(root);
scene.getStylesheets().add(getClass().getResource("app.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();
controller = (MyController) fxmlLoader.getController();
controller.setScrollBarBinding();
} catch(Exception e) {
e.printStackTrace();
}
}
今の表は、マウス、キー、またはスクロールバーを経由して同期的にスクロールする必要があります。
// Controller
@FXML private TableView<MyBean> tableLeft;
@FXML private TableView<MyBean> tableRight;
@FXML private ScrollBar scrollBar;
@SuppressWarnings("rawtypes")
private void bindScrollBars(TableView<?> tableView1, TableView<?> tableView2,
ScrollBar scrollBar, Orientation orientation) {
// Get the scrollbar of first table
VirtualFlow vf = (VirtualFlow)tableView1.getChildrenUnmodifiable().get(1);
ScrollBar scrollBar1 = null;
for (final Node subNode: vf.getChildrenUnmodifiable()) {
if (subNode instanceof ScrollBar &&
((ScrollBar)subNode).getOrientation() == orientation) {
scrollBar1 = (ScrollBar)subNode;
}
}
// Get the scrollbar of second table
vf = (VirtualFlow)tableView2.getChildrenUnmodifiable().get(1);
ScrollBar scrollBar2 = null;
for (final Node subNode: vf.getChildrenUnmodifiable()) {
if (subNode instanceof ScrollBar &&
((ScrollBar)subNode).getOrientation() == orientation) {
scrollBar2 = (ScrollBar)subNode;
}
}
// Set min/max of visible scrollbar to min/max of a table scrollbar
scrollBar.setMin(scrollBar1.getMin());
scrollBar.setMax(scrollBar1.getMax());
// bind the hidden scrollbar valueProterty the visible scrollbar
scrollBar.valueProperty().bindBidirectional(scrollBar1.valueProperty());
scrollBar.valueProperty().bindBidirectional(scrollBar2.valueProperty());
}
/*
* This method must be called in Application.start() after the stage is shown,
* because the hidden scrollbars exist only when the tables are rendered
*/
public void setScrollBarBinding() {
bindScrollBars(this.tableLeft, this.tableRight, this.scrollBar, Orientation.VERTICAL);
}
今、あなたはステージが表示され、テーブルがレンダリングされた後、アプリケーションからバインディングを呼び出す必要があります。
楽しんでください、オラフ
- 1. 2つのCoordinatorLayout + AppBarLayoutのスクロールを同期させる方法
- 2. スライダーを使用して2つのツリービューでスクロールを同期させる方法
- 3. 2つのUIScrollViews、同期スクロール
- 4. テーブルビュー非同期ロードされたセルイメージはスクロールして高速にスクロールするとちらつきます
- 5. 2つのコンボボックスをバインドしてVB.NETで同期させておく
- 6. 2つのdivのスクロール位置を同期させるにはどうすればよいですか?
- 7. 2つのBindingSourceを同期させる
- 8. 2つのJSliderを同期させる
- 9. スクロール中にdivをどのように同期させるのですか?
- 10. 複数のスクロールリストをスクロールして同期させる
- 11. テーブルビュー内の行にスクロールして行を点滅させる
- 12. 2つのMySQLデータベースをどのように同期させますか?
- 13. Androidどのように同期する2つの非同期タスク?
- 14. プッシュアクセスなしで2つのgitクローンを同期させる
- 15. 2つの機能を別々のクラスに同期させる
- 16. 2つのMySQLデータベースを同期させておくには?
- 17. ビデオ/オーディオを2つの異なるソースと同期させる
- 18. iPhone:2つの異なるレイヤーでアニメーションを同期させる
- 19. 2つのリストボックスのスクロールを同期するにはどうすればよいですか?
- 20. Android:2つの異なるビューの同期スクロール
- 21. 私は2つのリストビューを同時にスクロールさせたい
- 22. 角2 - 非同期http要求による補間とバインド
- 23. 2つのNSViewのレンダリングされたコンテンツをどのように同期させるべきですか?
- 24. JavaFXのテーブルビューにスクロールをするためにどのよう
- 25. 2つのフォルダのリソースをMavenと同期させる方法
- 26. Androidの2つのボタンを同期させる
- 27. レルム内のオブジェクトを削除してテーブルビューを同期させておく
- 28. Androidで2つの水平スクロールビューを同期させる
- 29. 2つのiOSデバイスをBluetoothで同期させる
- 30. 2つのMysqlデータベーステーブルを同期させる方法
ありがとう。否定的な回答を受け入れる習慣は何ですか?私はそれが本当に不可能かどうかは分かりません - それを証明することは確かに不可能です。少なくとも6日以上待つだろう。 –