- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在我的 JavaFX
应用程序中使用微调器。我已将以下 listener
添加到我的微调器中,以便始终从 Spinner
获取更新的值。此微调器
是双值微调器。
lengthOverAllSpinner.getEditor().textProperty().addListener((observable, oldValue, newValue) -> {
try {
lengthOverAllSpinner.getValueFactory().setValue(Double.parseDouble(newValue));
} catch (NumberFormatException e) {
lengthOverAllSpinner.getValueFactory().setValue(Double.parseDouble(oldValue));
}
});
但是,当我尝试从 GUI 编辑微调器时(例如,当前值为 340.23),并且当我按退格键并删除该值直到小数点以下抛出异常时,但我始终得到更新的值。不知道为什么会出现这个异常。请帮忙:
Exception in thread "JavaFX Application Thread" java.lang.IllegalArgumentException: The start must be <= the end
at javafx.scene.control.TextInputControl.getText(TextInputControl.java:446)
at javafx.scene.control.TextInputControl.updateContent(TextInputControl.java:564)
at javafx.scene.control.TextInputControl.replaceText(TextInputControl.java:548)
at javafx.scene.control.TextInputControl.deleteText(TextInputControl.java:496)
at javafx.scene.control.TextInputControl.deletePreviousChar(TextInputControl.java:897)
at com.sun.javafx.scene.control.skin.TextFieldSkin.deleteChar(TextFieldSkin.java:589)
at com.sun.javafx.scene.control.behavior.TextFieldBehavior.deleteChar(TextFieldBehavior.java:198)
at com.sun.javafx.scene.control.behavior.TextInputControlBehavior.deletePreviousChar(TextInputControlBehavior.java:311)
at com.sun.javafx.scene.control.behavior.TextInputControlBehavior.callAction(TextInputControlBehavior.java:143)
at com.sun.javafx.scene.control.behavior.BehaviorBase.callActionForEvent(BehaviorBase.java:218)
at com.sun.javafx.scene.control.behavior.TextInputControlBehavior.callActionForEvent(TextInputControlBehavior.java:127)
at com.sun.javafx.scene.control.behavior.BehaviorBase.lambda$new$75(BehaviorBase.java:135)
at com.sun.javafx.scene.control.behavior.BehaviorBase$$Lambda$206/1978625466.handle(Unknown Source)
at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Scene$KeyHandler.process(Scene.java:3965)
at javafx.scene.Scene$KeyHandler.access$1800(Scene.java:3911)
at javafx.scene.Scene.impl_processKeyEvent(Scene.java:2040)
at javafx.scene.Scene$ScenePeerListener.keyEvent(Scene.java:2502)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$KeyEventNotification.run(GlassViewEventHandler.java:197)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$KeyEventNotification.run(GlassViewEventHandler.java:147)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleKeyEvent$349(GlassViewEventHandler.java:228)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$$Lambda$459/610595104.get(Unknown Source)
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:404)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleKeyEvent(GlassViewEventHandler.java:227)
at com.sun.glass.ui.View.handleKeyEvent(View.java:546)
at com.sun.glass.ui.View.notifyKey(View.java:956)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$145(WinApplication.java:101)
at com.sun.glass.ui.win.WinApplication$$Lambda$36/2058534881.run(Unknown Source)
at java.lang.Thread.run(Thread.java:745)
提前致谢。
最佳答案
我认为在 Spinner
的编辑器 TextField
中设置 Spinner
值不是一个好主意。
来自 editableProperty 的文档Spinner
的:
If editable is true, user input will be received once the user types and presses the Enter key. At this point the input is passed to the SpinnerValueFactory converter StringConverter.fromString(String) method. The returned value from this call (of type T) is then sent to the SpinnerValueFactory.setValue(Object) method. If the value is valid, it will remain as the value. If it is invalid, the value factory will need to react accordingly and back out this change.
因此,默认工作是您只编辑文本,直到按 Enter 键。按 Enter 键后,TextField
的文本将被提交,并传递到 valueFactory 的 fromString
方法。您的Spinner
。您可以在工厂中处理这种情况,如下所示:
lengthOverAllSpinner.getValueFactory().setConverter(new StringConverter<Double>() {
private final DecimalFormat df = new DecimalFormat("#.####");
@Override public String toString(Double value) {
// If the specified value is null, return a zero-length String
if (value == null) {
return "";
}
return df.format(value);
}
@Override public Double fromString(String value) {
try {
// If the specified value is null or zero-length, return null
if (value == null)
return null;
value = value.trim();
if (value.length() < 1)
return null;
// Perform the requested parsing
return df.parse(value).doubleValue();
} catch (Exception ex) {
return 0.0;
}
}
});
此外,您可以使用 TextFormatter 过滤输入以不接受非法字符。在TextField
上:
TextFormatter<Object> textFormatter = new TextFormatter<>(c -> {
if (c.getText().matches("[^0-9.,]+") && !c.getText().isEmpty())
return null;
SpinnerValueFactory.DoubleSpinnerValueFactory factory = (SpinnerValueFactory.DoubleSpinnerValueFactory) spinner.getValueFactory();
try {
Double newVal = Double.parseDouble(c.getControlNewText());
return (newVal >= factory.getMin() && factory.getMax() >= newVal) ? c : null;
} catch (Exception ex) {
c.setText("0.0");
return c;
}
});
spinner.getEditor().setTextFormatter(textFormatter);
此格式化程序仅接受数字和“.”和“,”字符。
关于JavaFX Spinner 抛出 IllegalArgumentException : The start must be <= the end,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38520088/
在使用客户端应用程序和OAuth2授权服务器时出现错误。我用的是Spring。我已经设置了授权服务器、资源服务器和客户端。使用cURL时,授权服务器和资源服务器工作正常。但是,当我为客户端编写设置(包
在使用客户端应用程序和OAuth2授权服务器时出现错误。我用的是Spring。我已经设置了授权服务器、资源服务器和客户端。使用cURL时,授权服务器和资源服务器工作正常。但是,当我为客户端编写设置(包
我希望你能找到我的文字,因为我真的对我的项目感到困惑,因为应用程序不能安装在模拟器中。我希望你的建议和指导。这是运行应用程序时的日志记录。RegisterViewModel.kt。密封的类资源.kt。
我正在尝试制作按钮,单击它们时会播放声音。但我有一个麻烦。我实在搞不清楚。这是我的代码: import javafx.application.Application; import javafx.ev
我正在查看一些遗留代码,发现一个部分导致我得到“比较方法违反了其一般契约!”错误。我知道这个错误是代码不具有传递性的结果,但我不完全理解如何正确修复它。 这是导致错误的代码。 private void
运行以下方法时,我不断收到 IllegalArgumentException: public int randomize(ArrayList list){ Random rdm = new R
我想给 Jenkins 添加一个新的 slave。当我遵循 Jenkins UI 时,它给了我下面的命令 java -jar agent.jar -jnlpUrl http:///computer//
我正在使用运行时反射来加载一个包含以下两个方法的类: public static void foo(int[] args) { System.out.print("foo invoked: "
我已经使用以下查询来匹配所有文档 { "query": { "custom_score": { "query": { "query_string": {
我有这个命令: list.stream() .filter(e -> ...) .sorted(comparatorShuffle()) .findAny() .orE
我收到以下运行时错误: checkParameterIsNotNull, parameter oneClickTokens at com.info.app.fragments.Fragmen
我有两个列表: (def xxa ["olp" "xyz"]) (def xxb ["ulove" "alove" "holp" "sholp"]) 还有一个函数尝试获取第一个列表的元素,这些元素是第
在我的代码中,我在向服务器执行请求的行中捕获了 IllegalArgumentException(索引 85 处查询中的非法字符)。使用 was build as patter 命令,另一个任务正确完
我试图将 String[] 放入 jsonObject 并收到以下错误 java.lang.IllegalArgumentException: Invalid type of value. Type:
我过去的一个试卷问题要求我修改一个方法,以导致发生 IllegalArgumentException。 该方法仅涉及从银行帐户余额中提取资金 这是执行此操作的方法。 公共(public)无效提款(双倍
我这里遇到了一点问题。我想弄清楚如何捕获 IllegalArgumentException。对于我的程序,如果用户输入负整数,程序应该捕获 IllegalArgumentException 并询问用户
每当插件尝试运行此延迟的任务时,我都会收到“ IllegalArgumentException:插件不能为空”错误: Bukkit.getServer().getScheduler().sched
我有这个命令: list.stream() .filter(e -> ...) .sorted(comparatorShuffle()) .findAny() .orE
我在更改应用程序中的场景时遇到问题,看起来像 Main screen > Login screen 我在主文件中将屏幕存储为 hashmap一切都很好,直到我从登录屏幕返回到主屏幕并想再次加载登录屏幕
我在这里缺少什么? 我得到异常:java.lang.IllegalArgumentException:对象不是声明类的实例 public boolean onSave(Object entity,Se
我是一名优秀的程序员,十分优秀!