1 /* 2 * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package com.sun.javafx.scene.control.behavior; 27 28 import javafx.scene.control.ComboBox; 29 import javafx.scene.control.SelectionModel; 30 import java.util.ArrayList; 31 import java.util.List; 32 import static javafx.scene.input.KeyCode.DOWN; 33 import static javafx.scene.input.KeyCode.UP; 34 import static javafx.scene.input.KeyEvent.KEY_PRESSED; 35 36 public class ComboBoxListViewBehavior<T> extends ComboBoxBaseBehavior<T> { 37 38 /*************************************************************************** 39 * * 40 * Constructors * 41 * * 42 **************************************************************************/ 43 44 /** 45 * 46 */ 47 public ComboBoxListViewBehavior(final ComboBox<T> comboBox) { 48 super(comboBox, COMBO_BOX_BINDINGS); 49 } 50 51 /*************************************************************************** 52 * * 53 * Key event handling * 54 * * 55 **************************************************************************/ 56 57 protected static final List<KeyBinding> COMBO_BOX_BINDINGS = new ArrayList<KeyBinding>(); 58 static { 59 COMBO_BOX_BINDINGS.add(new KeyBinding(UP, KEY_PRESSED, "selectPrevious")); 60 COMBO_BOX_BINDINGS.add(new KeyBinding(DOWN, "selectNext")); 61 COMBO_BOX_BINDINGS.addAll(COMBO_BOX_BASE_BINDINGS); 62 } 63 64 @Override protected void callAction(String name) { 65 if ("selectPrevious".equals(name)) { 66 selectPrevious(); 67 } else if ("selectNext".equals(name)) { 68 selectNext(); 69 } else { 70 super.callAction(name); 71 } 72 } 73 74 private ComboBox<T> getComboBox() { 75 return (ComboBox<T>) getControl(); 76 } 77 78 private void selectPrevious() { 79 SelectionModel<T> sm = getComboBox().getSelectionModel(); 80 if (sm == null) return; 81 sm.selectPrevious(); 82 } 83 84 private void selectNext() { 85 SelectionModel<T> sm = getComboBox().getSelectionModel(); 86 if (sm == null) return; 87 sm.selectNext(); 88 } 89 }