- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 FXML 编辑器和一个 Controller ,它在 TreeView 中选择时设置域对象。因此,每次在 TreeView 中选择一个新对象时, Controller 都会解除编辑器中所有控件与前一个对象的绑定(bind),并绑定(bind)到新域对象的属性。这包括使用 setItems 从 ComboBox 中的域对象设置值。问题在于 setItems 会为项目列表中的每个项目触发 ComboBox 的 onAction 事件处理程序。根据我的理解,onAction 应该定义当用户从 ComboBox 中选择一个条目时触发的代码,而不是当加载 ComboBox 时触发的代码?!
我可以通过使用鼠标释放事件或在 setItems 期间禁用 actionevent 的 bool 信号量来解决此问题。但是,由于我找不到其他人提出这个要求,我想知道是否有更普遍的问题,我最好问问社区。
我在我的 OnAction 事件处理程序中创建了一个异常来打印堆栈跟踪——这帮助我理解了我上面解释的内容。也许这个堆栈跟踪可以帮助您了解发生了什么/出了什么问题。第一行是在 FXML 中链接到 onActionEvent 的方法,堆栈跟踪中的最后一行是 ComboBox 的 setItems 调用:
at com.agiletunes.EditorCtrl.versionSelection(EditorCtrl.java:173)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.reflect.misc.Trampoline.invoke(Unknown Source)
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.reflect.misc.MethodUtil.invoke(Unknown Source)
at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1769)
at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1657)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
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.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:49)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Node.fireEvent(Node.java:8413)
at com.sun.javafx.scene.control.skin.ComboBoxListViewSkin.handleControlPropertyChanged(ComboBoxListViewSkin.java:179)
at com.sun.javafx.scene.control.skin.BehaviorSkinBase.lambda$registerChangeListener$61(BehaviorSkinBase.java:197)
at com.sun.javafx.scene.control.MultiplePropertyChangeListenerHandler$1.changed(MultiplePropertyChangeListenerHandler.java:55)
at javafx.beans.value.WeakChangeListener.changed(WeakChangeListener.java:89)
at com.sun.javafx.binding.ExpressionHelper$Generic.fireValueChangedEvent(ExpressionHelper.java:361)
at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:81)
at javafx.beans.property.ObjectPropertyBase.fireValueChangedEvent(ObjectPropertyBase.java:105)
at javafx.beans.property.ObjectPropertyBase.markInvalid(ObjectPropertyBase.java:112)
at javafx.beans.property.ObjectPropertyBase.set(ObjectPropertyBase.java:146)
at javafx.scene.control.ComboBoxBase.setValue(ComboBoxBase.java:150)
at javafx.scene.control.ComboBox.updateValue(ComboBox.java:463)
at javafx.scene.control.ComboBox.access$200(ComboBox.java:192)
at javafx.scene.control.ComboBox$3.changed(ComboBox.java:446)
at com.sun.javafx.binding.ExpressionHelper$Generic.fireValueChangedEvent(ExpressionHelper.java:361)
at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:81)
at javafx.beans.property.ReadOnlyObjectPropertyBase.fireValueChangedEvent(ReadOnlyObjectPropertyBase.java:74)
at javafx.beans.property.ReadOnlyObjectWrapper.fireValueChangedEvent(ReadOnlyObjectWrapper.java:102)
at javafx.beans.property.ObjectPropertyBase.markInvalid(ObjectPropertyBase.java:112)
at javafx.beans.property.ObjectPropertyBase.set(ObjectPropertyBase.java:146)
at javafx.scene.control.SelectionModel.setSelectedItem(SelectionModel.java:102)
at javafx.scene.control.ComboBox$ComboBoxSelectionModel.lambda$new$154(ComboBox.java:494)
at com.sun.javafx.binding.ExpressionHelper$SingleInvalidation.fireValueChangedEvent(ExpressionHelper.java:137)
at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:81)
at javafx.beans.property.ReadOnlyIntegerPropertyBase.fireValueChangedEvent(ReadOnlyIntegerPropertyBase.java:72)
at javafx.beans.property.ReadOnlyIntegerWrapper.fireValueChangedEvent(ReadOnlyIntegerWrapper.java:102)
at javafx.beans.property.IntegerPropertyBase.markInvalid(IntegerPropertyBase.java:113)
at javafx.beans.property.IntegerPropertyBase.set(IntegerPropertyBase.java:147)
at javafx.scene.control.SelectionModel.setSelectedIndex(SelectionModel.java:68)
at javafx.scene.control.SingleSelectionModel.updateSelectedIndex(SingleSelectionModel.java:215)
at javafx.scene.control.SingleSelectionModel.clearSelection(SingleSelectionModel.java:68)
at javafx.scene.control.SingleSelectionModel.select(SingleSelectionModel.java:144)
at com.sun.javafx.scene.control.skin.ComboBoxListViewSkin.lambda$createListView$323(ComboBoxListViewSkin.java:484)
at com.sun.javafx.binding.ExpressionHelper$Generic.fireValueChangedEvent(ExpressionHelper.java:349)
at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:81)
at javafx.beans.property.ReadOnlyIntegerPropertyBase.fireValueChangedEvent(ReadOnlyIntegerPropertyBase.java:72)
at javafx.beans.property.ReadOnlyIntegerWrapper.fireValueChangedEvent(ReadOnlyIntegerWrapper.java:102)
at javafx.beans.property.IntegerPropertyBase.markInvalid(IntegerPropertyBase.java:113)
at javafx.beans.property.IntegerPropertyBase.set(IntegerPropertyBase.java:147)
at javafx.scene.control.SelectionModel.setSelectedIndex(SelectionModel.java:68)
at javafx.scene.control.MultipleSelectionModelBase.clearSelection(MultipleSelectionModelBase.java:682)
at javafx.scene.control.ListView$ListViewBitSetSelectionModel.updateDefaultSelection(ListView.java:1481)
at javafx.scene.control.ListView$ListViewBitSetSelectionModel.updateItemsObserver(ListView.java:1459)
at javafx.scene.control.ListView$ListViewBitSetSelectionModel.access$1200(ListView.java:1167)
at javafx.scene.control.ListView$ListViewBitSetSelectionModel$1.invalidated(ListView.java:1197)
at javafx.beans.WeakInvalidationListener.invalidated(WeakInvalidationListener.java:83)
at com.sun.javafx.binding.ExpressionHelper$Generic.fireValueChangedEvent(ExpressionHelper.java:349)
at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:81)
at javafx.beans.property.ObjectPropertyBase.fireValueChangedEvent(ObjectPropertyBase.java:105)
at javafx.beans.property.ObjectPropertyBase.markInvalid(ObjectPropertyBase.java:112)
at javafx.beans.property.ObjectPropertyBase.set(ObjectPropertyBase.java:146)
at javafx.scene.control.ListView.setItems(ListView.java:390)
at com.sun.javafx.scene.control.skin.ComboBoxListViewSkin.updateListViewItems(ComboBoxListViewSkin.java:222)
at com.sun.javafx.scene.control.skin.ComboBoxListViewSkin.lambda$new$322(ComboBoxListViewSkin.java:119)
at javafx.beans.WeakInvalidationListener.invalidated(WeakInvalidationListener.java:83)
at com.sun.javafx.binding.ExpressionHelper$Generic.fireValueChangedEvent(ExpressionHelper.java:349)
at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:81)
at javafx.beans.property.ObjectPropertyBase.fireValueChangedEvent(ObjectPropertyBase.java:105)
at javafx.beans.property.ObjectPropertyBase.markInvalid(ObjectPropertyBase.java:112)
at javafx.beans.property.ObjectPropertyBase.set(ObjectPropertyBase.java:146)
at javafx.scene.control.ComboBox.setItems(ComboBox.java:286)
at com.agiletunes.EditorCtrl.setHierarchicalElement(EditorCtrl.java:120)
提前致谢!
最佳答案
The
ComboBox
action, which is invoked whenever theComboBox
value
property is changed. This may be due to thevalue
property being programmatically changed [or ...]
替换 items
会导致 value
被设置为 null
,这可能会导致 onAction
被触发。
您可以在替换 items
时简单地删除 onAction
事件处理程序以防止它被触发或使用您的 bool 方法之一。
EventHandler<ActionEvent> handler = comboBox.getOnAction();
comboBox.setOnAction(null);
comboBox.setItems(FXCollections.observableArrayList("4", "5", "6"));
comboBox.setOnAction(handler);
关于JavaFX ComboBox setItems 触发 onAction 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40561850/
我有一个适用于 Mac 和 Linux 用户但不适用于 Windows 用户的 Chrome 扩展程序。当我进入控制台并在 localStorage 中设置一个项目时,它工作正常,但是当用户尝试使用扩
当我尝试将项目设置到 tableView 中时遇到问题,有关我使用 SceneBuilder 的信息。 Main.java: public class Main extends Application
我使用下面的代码在 webstorage 对象中存储一些内容,但出现此错误: Error:-- Object doesn't support property or method 'setItem'
我的 UINavigationController 工具栏是空白的,上面没有显示任何项目。这是我的代码 self.navigationController.toolbarHidden = NO; UI
创建 JavaFX GUI 应用程序,但无法让 ListView 在我的 Controller 类上工作。这是代码: MP3.Java package mp3player; import javafx
我的团队正在进行的一个小型学校项目遇到了问题。 每当我将输入提交到本地存储时,它都会覆盖以前的本地存储项目。这个想法是稍后通过使用复选框等“合并”成员输入与任务输入。 我希望能够从本地存储中列出大量名
我有一个实现可初始化的 Controller 类,它看起来像这样: public class FileSharingController implements Initializable { priv
我是 Qt 的新手,真的需要帮助解决这个问题。我目前正在学校开展一个实践培训项目。当我使用 ui->tableWidget->setItem(.....) 但没有显示时,我被卡住了。虽然新行添加了空白
我即将在我的一个 Angular 项目中使用 Storage.setItem(),但想检查当两个单独的 Web 应用程序尝试使用相同的 key 设置存储时浏览器如何处理该场景。 之前的值是否会被覆盖?
当使用 IE11 并使用 javascript 的 localStorage 功能时,由于浏览器内的安全设置,浏览器控制台会抛出“拒绝访问”消息来阻止 javascript 的执行。 有没有办法通过
我的 ListView 适配器中有这个, public void setListItems(List data) { Log.d(tag, this.data.size() + "," + d
所以,这是我的代码。 def classMaker(csv): csv = csv.split("/n") firstLine = csv[0] csv = csv[1:]
我正在尝试使用 HTML5 本地存储做一个 super 简单的 setItem 和 getItem。它似乎只是行不通。这有效: $(document).ready(function () { lo
我正在通过 WPF 应用程序创建一个 CRUD 应用程序来学习基础知识。但是,当我调用 SetItem() 来更改 ObservableCollection 中的元素时,我遇到了“由于其保护级别而无法
这个问题在这里已经有了答案: localStorage - use getItem/setItem functions or access object directly? (5 个答案) 关闭 7
每次单击箭头时,React 状态都会保存在本地ٍ 存储中 但是当你刷新页面时,值会减少 1,因为最后的更改没有保存到本地存储 如果修改多个项目,问题将在最后按下的项目The Code is here
我正在尝试将数组存储在客户端浏览器的 localStorage 中,以便在页面加载后轻松访问内容,数组是从数据库中提取的。 我的问题是,我只能在页面重新加载并反射(reflect)在客户端后才能使用本
下面是我的函数。我可以通过 res 在 console.log 中看到一个对象: login2(){ console.log(this.user_form_value); consol
好吧,假设我在 HTML 页面中输入这两个值:20、30。 我有这两个变量,我从 HTML 页面获取值,并且工作正常,因此 BrugerFugt=20 和 BrugerTemp=30: Bru
我正在尝试创建一个使用 localStorage 的图书跟踪器应用程序。但是,当我设置一个项目时 - 发生的情况是没有给出错误消息,但它不会记录到 localStorage。这是我的代码:
我是一名优秀的程序员,十分优秀!