是否可以为sample
添加标题/标签?我正在考虑一个不可选择的默认项目。我使用的是没有输入字段标签的内联表单。我想使用CheckComboBox
的内联标题。
答案 0 :(得分:0)
据我所知,API中没有任何功能。
但是我前一段时间为ComboBox
实现了这个,我认为你不会有任何麻烦来调整它以满足你的需求。我在下面发布了一个MCVE。至少你明白了。
修改:似乎CheckComboBox
没有setCellFactory
方法。所以也许我的实现对你没有多大帮助。也许一种替代方法是从正常CheckComboBox
中的ComboBox
实施您自己的JavaFX
。
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();
}
}
}