javafx.scene.control.ChoiceBox
にテキストを水平に配置する方法はありますか? ChoiceBox
にテキストを中央に配置することを検討しています。また、値を選択するときに開くドロップダウンも表示されます。JavaFXの選択ボックス内でテキストを水平方向に中央に揃える方法
1
A
答えて
1
@ VGRの推奨に従って、実装をjavafx.scene.control.ComboBox
に変更しました。その後、私はCenteredListCell
というクラスを作成しました:
import javafx.geometry.Pos;
import javafx.scene.control.ListCell;
public class CenteredListCell<T> extends ListCell<T> {
/** Default constructor */
public CenteredListCell() {
setMaxWidth(Double.POSITIVE_INFINITY);
setAlignment(Pos.BASELINE_CENTER);
}
@Override
public void updateItem(final T item, final boolean empty) {
super.updateItem(item, empty);
setText(empty || item == null ? null : item.toString());
}
}
次へ]を、私は(runWhenSkinned
につながるインスピレーションを得るため@kleopatraのおかげ)以下のユーティリティメソッドを作成しました:
private static void runWhenSkinned(final Control control, final Runnable operation) {
final ReadOnlyObjectProperty<?> skinProperty = control.skinProperty();
if (skinProperty.get() == null) {
// Run after the control has been skinned
skinProperty.addListener(observable -> Platform.runLater(operation));
} else {
// Run now, since the control is already skinned
operation.run();
}
}
public static <T> void center(final ComboBox<T> comboBox) {
runWhenSkinned(comboBox,() -> {
// Get the width of the combo box arrow button
final Region arrow = (Region)comboBox.lookup(".arrow-button");
final double arrowWidth = arrow.getWidth();
// Create a centered button cell
final ListCell<T> buttonCell = new CenteredListCell<T>();
comboBox.setButtonCell(buttonCell);
// Create an insets object with uneven horizontal padding
final Insets oldPadding = buttonCell.getPadding();
final Insets newPadding = new Insets(oldPadding.getTop(),
arrowWidth, oldPadding.getBottom(), 0);
// Replace the default cell factory
comboBox.setCellFactory(listView -> new CenteredListCell<T>() {
{ setPadding(newPadding); }
});
});
}
最終結果ボタンセルと項目のリストビューの両方に中央揃えのテキストを持つComboBox
です。
+1
コンボのスキンプロパティにリスナーを登録し、新しいスキンが通知されたらユーティリティメソッドを呼び出すことができます – kleopatra
関連する問題
- 1. イメージを水平方向と垂直方向に中央に揃える方法
- 2. CSSは、2つのテキスト部分の中央を揃える(水平方向)
- 3. 水平テーブルセルを中央に揃える方法
- 4. CSS水平方向中央選択メニューとラベル
- 5. テキストと選択ボックスを水平に整列する方法は?
- 6. CSSで水平方向の中央ボタン
- 7. 中央のテキストを水平方向に複数回出力テーブル
- 8. WPF - 水平方向のスタックパネル内でテキストブロックを右揃えにする方法は?
- 9. ページ内のテキストPを垂直方向と水平方向に中央に置く方法
- 10. ブートストラップ:列内にコンテンツを垂直方向に中央に揃える方法
- 11. 中央に左揃えの水平メニューをフローティングする
- 12. PythonでMS Wordのテキストを中央に揃える方法win32com
- 13. CSSでテキストの列を中央に揃える方法
- 14. Delphi7でエディットボックスのテキストを中央に揃える方法は?
- 15. カードを左揃えのテキストに中央揃えにする方法は?
- 16. Html:テキストを中央揃えの画像に左揃えにする方法は?
- 17. テキストを中央揃えにする方法ボタンの上に
- 18. レスポンスグリッドを中央に揃える方法
- 19. ブートストラップ - 選択とテキストボックスを水平に1行に揃える方法は?
- 20. UIlabelの縦方向の中央揃えのテキスト
- 21. テキストをボックスの枠線の中央に揃える
- 22. ビューを横方向のリニアレイアウトの中央に水平に配置する方法
- 23. 画像ごとにテキストを中央に揃える方法
- 24. CSS:リスト要素を左揃えのテキストと中央揃えにする方法
- 25. divの内容を水平方向と垂直方向に揃える方法は?
- 26. 横方向の中央揃え要素テキスト揃えの中央が機能しない
- 27. Div内のDivを適切に中央に揃える方法
- 28. kivyテキスト入力でテキストを水平に中央に配置する方法は?
- 29. 水平方向の中央にTextInputLayoutエラーが表示される
- 30. 前後の他の要素に関係なく、要素を水平方向と垂直方向に中央に揃える方法は?
代わりに、ComboBoxを代わりに使用し、そのcellFactoryおよびbuttonCellプロパティを設定します。 – VGR