如何在JavaFX ChoiceBox中水平居中放置文本

杰夫·G

有什么办法可以将文本水平居中放置javafx.scene.control.ChoiceBox我希望将文本放在中ChoiceBox,以及在选择值的过程中打开的下拉列表中居中

杰夫·G

根据@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());
    }

}

接下来,我创建了以下实用程序方法(感谢@kleopatra带来了灵感runWhenSkinned):

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在按钮单元格和项目列表视图中居中显示文本。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在JavaFX ChoiceBox中水平居中放置文本

来自分类Dev

如何在水平StackLayout中居中放置文本?

来自分类Dev

JavaFX:如何在ScrollPane中水平居中放置ImageView?

来自分类Dev

如何在DIV中垂直和水平居中放置文本

来自分类Dev

如何在UITextView中水平居中放置一行文本?

来自分类Dev

如何在flutter中水平和垂直居中放置文本字段

来自分类Dev

如何在CSS的li中水平居中放置div

来自分类Dev

如何在导航栏中垂直居中放置文本?

来自分类Dev

如何在太小的容器中居中放置文本?

来自分类Dev

如何在div中居中放置垂直文本?

来自分类Dev

如何在多个div中垂直居中放置文本

来自分类Dev

如何在Android的微调器中居中放置文本

来自分类Dev

如何在容器中居中放置文本?

来自分类Dev

如何在Tkinter中居中放置文本标签?

来自分类Dev

如何在多个div中垂直居中放置文本

来自分类Dev

如何在javafx中居中放置图像

来自分类Dev

如何在窗格JavaFX中居中放置节点

来自分类Dev

如何在窗格JavaFX中居中放置节点

来自分类Dev

如何在放置在绝对位置的响应图像上垂直和水平居中放置文本?

来自分类Dev

如何在浮动按钮元素之间垂直和水平居中放置文本?

来自分类Dev

html:如何在未居中的文本框中居中放置文本

来自分类Dev

html:如何在未居中的文本框中居中放置文本

来自分类Dev

如何使用CSS在DIV中居中放置文本

来自分类Dev

如何使用CSS在DIV中垂直居中放置文本?

来自分类Dev

如何在Swift中为所有iOS设备水平居中放置标签

来自分类Dev

如何在Swift中为所有iOS设备水平居中放置标签

来自分类Dev

如何在UIWebView中水平和垂直居中放置HTML字符串

来自分类Dev

如何在点上水平居中放置子图?

来自分类Dev

如何在点上水平居中放置子图?

Related 相关文章

  1. 1

    如何在JavaFX ChoiceBox中水平居中放置文本

  2. 2

    如何在水平StackLayout中居中放置文本?

  3. 3

    JavaFX:如何在ScrollPane中水平居中放置ImageView?

  4. 4

    如何在DIV中垂直和水平居中放置文本

  5. 5

    如何在UITextView中水平居中放置一行文本?

  6. 6

    如何在flutter中水平和垂直居中放置文本字段

  7. 7

    如何在CSS的li中水平居中放置div

  8. 8

    如何在导航栏中垂直居中放置文本?

  9. 9

    如何在太小的容器中居中放置文本?

  10. 10

    如何在div中居中放置垂直文本?

  11. 11

    如何在多个div中垂直居中放置文本

  12. 12

    如何在Android的微调器中居中放置文本

  13. 13

    如何在容器中居中放置文本?

  14. 14

    如何在Tkinter中居中放置文本标签?

  15. 15

    如何在多个div中垂直居中放置文本

  16. 16

    如何在javafx中居中放置图像

  17. 17

    如何在窗格JavaFX中居中放置节点

  18. 18

    如何在窗格JavaFX中居中放置节点

  19. 19

    如何在放置在绝对位置的响应图像上垂直和水平居中放置文本?

  20. 20

    如何在浮动按钮元素之间垂直和水平居中放置文本?

  21. 21

    html:如何在未居中的文本框中居中放置文本

  22. 22

    html:如何在未居中的文本框中居中放置文本

  23. 23

    如何使用CSS在DIV中居中放置文本

  24. 24

    如何使用CSS在DIV中垂直居中放置文本?

  25. 25

    如何在Swift中为所有iOS设备水平居中放置标签

  26. 26

    如何在Swift中为所有iOS设备水平居中放置标签

  27. 27

    如何在UIWebView中水平和垂直居中放置HTML字符串

  28. 28

    如何在点上水平居中放置子图?

  29. 29

    如何在点上水平居中放置子图?

热门标签

归档