我试图使用JavaFX组合框
作为带有历史记录的搜索字段。这是我的代码示例。
ObservableList<String> patternHistory = FXCollections.observableArrayList();
searchComboBox.setItems(patternHistory);
searchComboBox.valueProperty().addListener((observable, oldValue, newValue) -> {
ObservableList<String> history = searchComboBox.getItems();
// This works fine
// history.add(newValue);
// This does not work
history.add(0, newValue);
});
如果我做历史记录。add(newValue)
组合框的行为符合我的预期。历史记录中的最后一个条目将添加到列表的末尾。但是,我希望首先显示最后一个条目(我也希望删除重复项并限制历史大小,但在本例中我保持简单)。
所以我决定简单地将新值添加到列表前面的history中。添加(0,newValue)
。然而,当我这样做时,组合框开始以奇怪的方式运行,代码不再工作。看起来,只要我在列表的末尾添加/删除项目,它就可以正常工作,但是如果我在开始或中间做同样的事情,它就不起作用了。
这里我使用的是lambda表达式语法,但我尝试了匿名类表示法,结果是一样的。我还尝试实现我自己的可观察列表,结果也是一样的。
我目前正在使用JDK1.8。0_60但是我在早期版本中遇到了问题。有人能告诉我是否有办法解决这个问题或者我是否做错了什么吗?
解决方法似乎是替换列表中的所有项。以下方法似乎工作正常:
import java.util.ArrayList;
import java.util.List;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.ComboBox;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class HistoryListComboBox extends Application {
@Override
public void start(Stage primaryStage) {
ComboBox<String> combo = new ComboBox<>();
combo.getItems().addAll("One", "Two", "Three");
combo.setEditable(true);
combo.valueProperty().addListener((obs, oldValue, newValue) -> {
if (! combo.getItems().contains(newValue)) {
List<String> newItems = new ArrayList<>();
newItems.add(newValue);
newItems.addAll(combo.getItems());
combo.getItems().setAll(newItems);
}
});
StackPane root = new StackPane(combo);
primaryStage.setScene(new Scene(root, 350, 120));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
我试图更改JavaFX组合框列表的文本颜色,但它似乎不起作用。 返回以下内容:下拉列表文本不是白色 我该怎么解决这个问题?我的CSS知识不是很强。
我正在用文本对象填充一个组合框。通过使用文本对象而不是字符串,我可以添加一个id值,我可以在程序中使用它,然后在我决定国际化UI时利用它。不管怎样,以下是我正在做的:主课: } 控制器: 测验fxml: 现在,这个很好用。但问题是,当我选择一个项目时,该项目上的文本会变成空白,如下所示: 如果我选择另一个,它也会消失: 我仍然可以选择这些项目,但它们只是不在那里。这是一个错误吗?如果是的话,有办法
我正在开发一些学术性的JavaFX桌面应用程序。在创建注册表单时,我需要使用combobox/choicebox,但在这一步中我遇到了几个问题。组合框没有显示任何项目。我尝试了许多在堆栈溢出上找到的修复方法,但似乎都不起作用。我在分享我的主要观点。java控制器代码和我的FXML代码放在一边。 Main.java Controller.java FXML文件
我在工作表上使用“生成”按钮。当我单击按钮时,会出现一个弹出窗口(表单),其中包含两个组合框。根据第一个组合框中的选择,填充第二个组合框选项列表。 对于第一个组合框,当我对项目值进行硬编码时,它工作正常。表单代码如下: 我尝试使用以下表单代码从Excel工作表中的列中获取组合框项目值,从而使此项目列表动态化: 但是上面的代码抛出错误:运行时错误“1004”:对象“_Global”的方法“范围”失败
我需要一个通过observatelist填充的组合框,其中包含从DB检索的特定数据。这是我的消息来源。 模型 查看 ComboBox由NAME字段填充,listener用于获取相对ID并将其传递给查询,以便在DB上存储数据。 好的,一切似乎都正常,但我有两个问题: > 当用户需要修改此记录时,我需要从DB获取ID并在ComboBox中选择相对名称。我该怎么做? comboBank.set值; 有没
问题内容: 我有一个带有组合框的UI。每次组合将要打开列表时,必须刷新可以选择的项目列表。 有什么办法-即添加一个侦听器,该侦听器将通知UI Combo即将打开? 不幸的是,当列表更改时,我无法观察模型来更新列表。 问题答案: 不幸的是,SWT组件没有这种方法。在Swing中,借助于PopupMenuListener接口将很容易。 我可以想到的一种解决方法是实现MouseListener和Keyb