gpt4 book ai didi

java - 如何在 JavaFX ChoiceBox 中水平居中文本

转载 作者:行者123 更新时间:2023-11-30 07:22:17 28 4
gpt4 key购买 nike

有什么方法可以使 javafx.scene.control.ChoiceBox 中的文本水平居中吗?我希望将 ChoiceBox 中的文本以及在选择值的过程中打开的下拉列表居中。

最佳答案

根据@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,其按钮单元格和项目 ListView 中的文本均居中。

关于java - 如何在 JavaFX ChoiceBox 中水平居中文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37353679/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com