gpt4 book ai didi

javafx - ControlsFX:如何向 CheckComboBox 添加标题?

转载 作者:行者123 更新时间:2023-12-02 05:35:39 24 4
gpt4 key购买 nike

是否可以向 CheckComboBox 添加标题/标签?我正在考虑一个不可选择的默认项目。我使用的内联表单没有输入字段的标签。我想为 CheckComboBox 使用内联标题。

最佳答案

据我所知,API 中没有这方面的功能。

但不久前我自己为 ComboBox 实现了这个,我认为您在调整它以满足您的需求时不会遇到任何麻烦。我在下面发布了一个 MCVE。至少你明白了。

编辑:CheckComboBox 似乎没有 setCellFactory 方法。所以也许我的实现对你没有多大帮助。也许一种替代方法是从普通 JavaFX 中的 ComboBox 实现您自己的 CheckComboBox

MCVE:

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.ComboBox;
import javafx.scene.control.ListCell;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;

public class MCVE extends Application {

@Override
public void start(Stage stage) {
HBox box = new HBox();

ComboBox<ComboBoxItem> cb = new ComboBox<ComboBoxItem>();

cb.setCellFactory(e -> new ListCell<ComboBoxItem>() {
@Override
public void updateItem(ComboBoxItem item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
setText(null);
setDisable(false);
} else {
setText(item.toString());

// If item is a header we disable it.
setDisable(!item.isHeader());

// If item is a header we add a style to it so it looks like a header.
if (item.isHeader()) {
setStyle("-fx-font-weight: bold;");
} else {
setStyle("-fx-font-weight: normal;");
}
}
}
});

ObservableList<ComboBoxItem> items = FXCollections.observableArrayList(new ComboBoxItem("Header", true),
new ComboBoxItem("Option", false));

cb.getItems().addAll(items);

box.getChildren().add(cb);

stage.setScene(new Scene(box));
stage.show();
}

public static void main(String[] args) {
launch();
}

/**
* A wrapping class for a String that also has a boolean that indicates
* whether this item should be disabled or not.
*
* @author Jonatan Stenbacka
*/
public class ComboBoxItem implements Comparable<ComboBoxItem> {

private String text;
private boolean isHeader = false;

public ComboBoxItem(String text, boolean isHeader) {

this.text = text;
this.isHeader = isHeader;
}

public ComboBoxItem(String text) {
this.text = text;
}

public void setText(String text) {
this.text = text;
}

public String getText() {
return text;
}

public boolean isHeader() {
return isHeader;
}

@Override
public String toString() {
return text;
}

@Override
public boolean equals(Object obj) {
if (obj == this) {
return true;
} else if (obj instanceof ComboBoxItem) {
ComboBoxItem item = (ComboBoxItem) obj;
if (text.equals(item.getText())) {
return true;
}
} else if (obj instanceof String) {
String item = (String) obj;
if (text.equals(item)) {
return true;
}
}

return false;
}

@Override
public int compareTo(ComboBoxItem o) {
return getText().compareTo(o.getText());
}

@Override
public int hashCode() {
return text.hashCode();
}
}
}

关于javafx - ControlsFX:如何向 CheckComboBox 添加标题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38861435/

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