Sterilize the keyPressedHandler

Issue #846 new
Justin Casol
created an issue

The handler of key presses in the Spreadsheet View doesn't account for if there are no selected cells.

SpreadsheetView nothing selected.png

1: Note how the spreadsheet itself is selected, but no cells.

2: Press enter

You should get the exception at this point.

Exception in thread "JavaFX Application Thread" java.lang.ArrayIndexOutOfBoundsException: -1
    at java.util.ArrayList.elementData(ArrayList.java:418)
    at java.util.ArrayList.get(ArrayList.java:431)
    at com.sun.javafx.collections.ObservableListWrapper.get(ObservableListWrapper.java:89)
    at impl.org.controlsfx.spreadsheet.FocusModelListener.getNextRowNumber(FocusModelListener.java:135)
    at org.controlsfx.control.spreadsheet.SpreadsheetViewSelectionModel.clearAndSelectNextCell(SpreadsheetViewSelectionModel.java:232)
    at org.controlsfx.control.spreadsheet.SpreadsheetView.lambda$new$99(SpreadsheetView.java:1789)
    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.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:3964)
    at javafx.scene.Scene$KeyHandler.access$1800(Scene.java:3910)
    at javafx.scene.Scene.impl_processKeyEvent(Scene.java:2040)
    at javafx.scene.Scene$ScenePeerListener.keyEvent(Scene.java:2501)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$KeyEventNotification.run(GlassViewEventHandler.java:217)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$KeyEventNotification.run(GlassViewEventHandler.java:149)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleKeyEvent$353(GlassViewEventHandler.java:248)
    at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleKeyEvent(GlassViewEventHandler.java:247)
    at com.sun.glass.ui.View.handleKeyEvent(View.java:546)
    at com.sun.glass.ui.View.notifyKey(View.java:966)
    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(Thread.java:745)

I get I'm using this view in an unintended way, if I had a static list of rows, and a static width this problem would pretty much go away, but I like your selection model and confirmation stuff, and I think it'll be easier to get SpreadsheetView to do what I want than it has been to get TableView to do what SpreadsheetView does : D

speaking of which, as an aside, I haven't been able to find a way to make my columns consistently fill widths idiomatically, without a need to listen to width changes and muddle my way through manually. Is there any way to do that with the spreadsheetView?

Comments (1)

  1. SamirH

    Hi,

    I'm not able to reproduce your issue. Please read this :https://groups.google.com/forum/#!topic/controlsfx-dev/DbjZor4buAQ and upload some code to demonstrate the issue.

    Regarding your second issue, I do not have any solution right now. In the tableView, there is a CONSTRAINED_RESIZE_POLICY that exists but I don't think we support it in SpreadsheetView. However, I believe you're not the first one to try doing that. You should search on Stackoverflow, or on the issues or even in the google group if someone has mentioned that.

    Regards, Sam'

  2. Log in to comment