- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有带页码(1、2、3 等)的组合框。当用户选择特定页面时(通过鼠标或键盘(作为组合框可编辑))。我想显示和总页数。这就是为什么在组合框操作上我也这样做:
combobox.setValue(currentPage+"/"+totalPages)
所以最终的代码看起来像
@FXML
private void onPageComboBoxAction(ActionEvent event){
....
combobox.setValue(currentPage+"/"+totalPages)
}
然而,这段代码又触发了一个 ActionEvent 和代码循环。所以我看到了两种可能的方式:
谁能帮我解决这个问题?
最佳答案
setValue(...)
更改组合框所持有的值(即它更改数据或基础模型的状态)。在我看来,您在这里真正想要的只是改变数据的显示方式。您可以通过设置纽扣单元来更改所选值的显示。
这是一个示例,其中按钮单元格跟踪所选项目和页数:
import java.util.Random;
import java.util.stream.IntStream;
import javafx.application.Application;
import javafx.collections.ListChangeListener.Change;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.ListCell;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;
public class PageNumberCombo extends Application {
private static final Random RNG = new Random();
@Override
public void start(Stage primaryStage) {
ComboBox<Integer> combo = new ComboBox<>();
combo.setButtonCell(new ListCell<Integer>() {
{
itemProperty().addListener((obs, oldValue, newValue) -> update());
emptyProperty().addListener((obs, oldValue, newValue) -> update());
combo.getItems().addListener((Change<? extends Integer> c) -> update());
}
private void update() {
if (isEmpty() || getItem() == null) {
setText(null);
} else {
setText(String.format("%d / %d", getItem().intValue(), combo.getItems().size()));
}
}
});
Button reloadButton = new Button("Reload");
reloadButton.setOnAction(e -> reload(combo));
reload(combo);
HBox root = new HBox(10, combo, reloadButton);
root.setAlignment(Pos.CENTER);
root.setPadding(new Insets(24));
primaryStage.setScene(new Scene(root, 240, 60));
primaryStage.show();
}
private void reload(ComboBox<Integer> combo) {
int numPages = RNG.nextInt(10) + 11 ;
combo.getItems().clear();
IntStream.rangeClosed(1, numPages).forEach(combo.getItems()::add);
}
public static void main(String[] args) {
launch(args);
}
}
如果您的 ComboBox
是可编辑的,那么按钮单元格默认是一个 TextField
,组合框的 converter
用于转换文本字段中的字符串值到模型值,反之亦然。所以在这种情况下,您只需要安装一个转换器,在整数 x
和字符串 "x/total"
之间进行转换。
请注意,默认情况下,此转换器还用于显示下拉单元格中的文本,因此如果您希望这些文本显示为整数值,则需要安装 cellFactory
显式创建这些单元格。
import java.util.Random;
import java.util.stream.IntStream;
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.ListCell;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;
import javafx.util.StringConverter;
public class PageNumberCombo extends Application {
private static final Random RNG = new Random();
@Override
public void start(Stage primaryStage) {
ComboBox<Integer> combo = new ComboBox<>();
combo.setEditable(true);
combo.setConverter(new StringConverter<Integer>() {
@Override
public String toString(Integer object) {
return object + " / " + combo.getItems().size();
}
@Override
public Integer fromString(String string) {
int index = string.indexOf('/');
if (index < 0) {
index = string.length();
}
String text = string.substring(0, index).trim();
try {
return Integer.parseInt(text);
} catch (Exception exc) {
return 0 ;
}
}
});
combo.setCellFactory(lv -> new ListCell<Integer>() {
@Override
public void updateItem(Integer item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
setText(null) ;
} else {
setText(item.toString());
}
}
});
Button reloadButton = new Button("Reload");
reloadButton.setOnAction(e -> reload(combo));
reload(combo);
HBox root = new HBox(10, combo, reloadButton);
root.setAlignment(Pos.CENTER);
root.setPadding(new Insets(24));
primaryStage.setScene(new Scene(root, 240, 60));
primaryStage.show();
}
private void reload(ComboBox<Integer> combo) {
int numPages = RNG.nextInt(10) + 11 ;
combo.getItems().clear();
IntStream.rangeClosed(1, numPages).forEach(combo.getItems()::add);
}
public static void main(String[] args) {
launch(args);
}
}
关于JavaFx:没有 ActionEvent 的 comboBox.setValue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31134196/
我正在为 Mac OS X 编写程序,遇到以下问题: 在我的一个类中,有许多 bool 属性,可以使用 KVO 访问这些属性(即通过 valueForKey: 和 setValue:forKey: 方
我正在创建一个带有页面对象文件 (login.po.js) 和测试规范文件 (test.spec.js) 的 webdriver.io 自动化,但是当我调用它时它似乎无法识别该对象测试规范文件 (te
我正在尝试使用 setValue() 方法将数据保存到我的实时数据库,但它没有保存我的对象。 我尝试了一个简单的字符串,但仍然没有成功。 我的代码: FirebaseDatabase db =
我一直在谷歌应用程序脚本上为工作表编码: function basePesa(){ var sheet = SpreadsheetApp.getActiveSpreadsheet().getSh
FinalViewWithSending *newView = [[FinalViewWithSending alloc]initWithNibName:@"FinalViewWithSending"
我创建了一个自动完成和一个选项组件,当我们在输入字段中键入搜索短语时,我调用网络服务并获取数据,然后在选项组件中显示列表,但是当我从该列表中选择一个选项并将值设置为输入字段,然后 Web 服务将再次触
电子表格的 Google-apps 脚本 我有一个可变长度的对象数组。 [{}, {}]我使用 for 循环 (i=0; i
我有以下带有MutableLiveData data的ViewModel和另一个从ones派生的LiveData data,其方式是仅当data.number等于1时才更新其值。 class Dumm
我在 Mac OS X 10.6.8、wxPython 2.9.3.1 和 64 位 Python v2.7.2 下运行以下代码: import wx class MyFrame(wx.Frame):
我会在他注册时将用户数据保存到 firebase,但是有一个问题,如果他创建了 Auth 帐户然后在保存他的信息之前失去了连接,这意味着他将得到没有任何个人资料信息的电子邮件\密码。 所以问题是如果他
我创建了一个自动完成和一个选项组件,当我们在输入字段中键入搜索短语时,我调用网络服务并获取数据,然后在选项组件中显示列表,但是当我从该列表中选择一个选项并将值设置为输入字段,然后 Web 服务将再次触
我们目前有一个按钮,第一次按下时会添加一个节点,如下/Users/UID/Interests/childByAutoID/"value",再次按下时会删除该节点上的值。第一次单击按钮时,值将添加到节点
我在使用 Swift 编写的 iOS 应用程序中使用 Firebase。 static func createUserRecord(uid: String, user: User){
大家好,我是 swift 的新手,在我的应用程序中,我声明了一个这样的字典: var imageDict : Dictionary = [:] 我想像这样为该字典设置值: imageDict.setV
我已经使用代码创建了RadioGroup var radios = new Ext.form.RadioGroup({ columns : 2, items: [
这个问题已经有答案了: Xcode - How to fix 'NSUnknownKeyException', Reason: "… this class is not key value codin
如何使用 RTTI 设置枚举字段的值? 即 type TCPIFileStatus= (fsUnknown, fsProcessed); TTest = class FStatus:
我帮助维护一个 Google 电子表格,其中通过 HTML 表单添加新数据。 添加新数据时,新数据的插入点取决于表单字段之一(申请接收日期)。 该脚本查找工作表中应插入数据的位置并执行 3 件事: 在
我正在编写的程序使用许多注册表项来存储一些重要信息。为了确保程序的第一个方法中存在所有注册表项,我测试注册表项是否存在,如果不存在则创建它们并使用默认值。 这是我的代码: RegistryKey R
我正在学习 Extjs 并遇到问题,当我尝试将新文本附加到项目时,我收到错误 tf.setValue 不是函数 getValue 也是如此。当我尝试 setVisible 时,它的工作原理应该是这
我是一名优秀的程序员,十分优秀!