/* * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package com.sun.javafx.scene.control; import javafx.beans.property.*; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.scene.control.Control; /** * */ public abstract class InputField extends Control { /** * The default value for {@link #prefColumnCount}. */ public static final int DEFAULT_PREF_COLUMN_COUNT = 12; /** * Indicates whether this InputField can be edited by the user. If true, the * "readonly" pseudo class will be false, but if false, the "readonly" * pseudo class will be true. */ private BooleanProperty editable = new SimpleBooleanProperty(this, "editable", true); public final boolean isEditable() { return editable.getValue(); } public final void setEditable(boolean value) { editable.setValue(value); } public final BooleanProperty editableProperty() { return editable; } /** * The {@code InputField}'s prompt text to display, or * null if no prompt text is displayed. */ private StringProperty promptText = new StringPropertyBase("") { @Override protected void invalidated() { // Strip out newlines String txt = get(); if (txt != null && txt.contains("\n")) { txt = txt.replace("\n", ""); set(txt); } } @Override public Object getBean() { return InputField.this; } @Override public String getName() { return "promptText"; } }; public final StringProperty promptTextProperty() { return promptText; } public final String getPromptText() { return promptText.get(); } public final void setPromptText(String value) { promptText.set(value); } /** * The preferred number of text columns. This is used for * calculating the {@code InputField}'s preferred width. */ private IntegerProperty prefColumnCount = new IntegerPropertyBase(DEFAULT_PREF_COLUMN_COUNT) { private int oldValue = get(); @Override protected void invalidated() { int value = get(); if (value < 0) { if (isBound()) { unbind(); } set(oldValue); throw new IllegalArgumentException("value cannot be negative."); } oldValue = value; } @Override public Object getBean() { return InputField.this; } @Override public String getName() { return "prefColumnCount"; } }; public final IntegerProperty prefColumnCountProperty() { return prefColumnCount; } public final int getPrefColumnCount() { return prefColumnCount.getValue(); } public final void setPrefColumnCount(int value) { prefColumnCount.setValue(value); } /** * The action handler associated with this InputField, or * null if no action handler is assigned. * * The action handler is normally called when the user types the ENTER key. */ private ObjectProperty> onAction = new ObjectPropertyBase>() { @Override protected void invalidated() { setEventHandler(ActionEvent.ACTION, get()); } @Override public Object getBean() { return InputField.this; } @Override public String getName() { return "onAction"; } }; public final ObjectProperty> onActionProperty() { return onAction; } public final EventHandler getOnAction() { return onActionProperty().get(); } public final void setOnAction(EventHandler value) { onActionProperty().set(value); } /** * Creates a new InputField. The style class is set to "money-field". */ public InputField() { getStyleClass().setAll("input-field"); } // @Override protected String getUserAgentStylesheet() { // return getClass().getResource("InputField.css").toExternalForm(); // } }