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'運算符。我建議你閱讀並理解它在原文中的用途。形式問題「我複製了一些我不明白的代碼,爲什麼它不起作用?」在這裏通常會變得很短暫。 –