0
我有两个ListView,每个都由一个单独的ArrayList填充。我试图让它在左边的ListView中双击一个项目将它复制到右边,然后双击右边的项目。每当我尝试添加一个项目时,我都会遇到一大堆错误,而且没有任何变化。去除物品的时间约为一半;这真的很奇怪,有时当我运行它时,事情将会消失得很好,而其他时候,我也会遇到大量的错误。有些代码:从ListView中删除项目出错
//Right list view
ListView<String> lv_right = new ListView<>
(FXCollections.observableArrayList(selectedSpells));
lv_right.setPrefSize(175, 598);
lv_right.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);
//Double clicking in right list
lv_right.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
if(event.getButton() == MouseButton.PRIMARY && event.getClickCount() == 2 &&
(event.getTarget() instanceof Labeled || ((BorderPane) event.getTarget()).getChildren().size() > 0)) {
//Removing items from right list
String item = lv_right.getSelectionModel().getSelectedItem();
lv_right.getItems().remove(item);
}
}
});
我有同样的事情,现在左的ListView,与lv_left.getItems().remove(item);
例外与cleric_cantrips.add(item);
从未在所有工作所取代。
错误的转换:
Exception in thread "JavaFX Application Thread" java.lang.ClassCastException: com.sun.javafx.scene.control.skin.LabeledText cannot be cast to javafx.scene.layout.BorderPane
at spell_manager$1.handle(spell_manager.java:52)
at spell_manager$1.handle(spell_manager.java:1)
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.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$ClickGenerator.postProcess(Scene.java:3470)
at javafx.scene.Scene$ClickGenerator.access$8100(Scene.java:3398)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3766)
at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485)
at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762)
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:381)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$354(GlassViewEventHandler.java:417)
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:416)
at com.sun.glass.ui.View.handleMouseEvent(View.java:555)
at com.sun.glass.ui.View.notifyMouse(View.java:937)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
at java.lang.Thread.run(Unknown Source)
通常的垃圾一样,这意味着有一个与代码本身有问题,但我没有错误在那里,所以我想我会的情况下,任何人在这里添加此想要看到它,而不是等待有人问他们是否确实需要它。
我老实说不知道该怎么做。我还是使用JavaFX的新手......先谢谢了!
你假设,如果此事件的目标不是一个标记,那么它一定是一个'BorderPane'。显然情况并非如此,你的代码正在触发一个类转换异常。这种状况应该是在做什么? (什么“我没有错误”是什么意思?) –
“我没有错误”只是意味着我没有任何在编辑器中,代码运行良好,没有启动错误。至于标签和BorderPane问题,我会说实话,我不知道为什么标签位在那里。我从另一篇文章中得到了这一行,并且它很有效,呃......就像我说的,我是JavaFX的新手,我正在一起拼凑事物。 – hego64
好吧,如果代码没有编译,那么你很难指望得到运行时错误。查看其他人的代码并复制它是学习的好方法,但这个想法是你应该明白它的作用。盲目复制它而不知道它在做什么不会教你任何东西。你缺少的部分是关于cast和'instanceof'运算符。我建议你阅读并理解它在原文中的用途。形式问题“我复制了一些我不明白的代码,为什么它不起作用?”在这里通常会变得很短暂。 –