[REVIEW REQUEST] Add text property to ComboBox

Alexandre (Shura) Iline alexandre.iline at oracle.com
Wed Mar 14 06:24:29 PDT 2012


On 3/14/12 5:12 PM, Tadashi Ohmura wrote:
> Shura,
>
> The object in the input field of editable combobox seems to be String in
> spite of the type of combobox.

This is how the current implementation is done.

AFAIK, there is nothing in javadoc which implies this. More precisely, 
it says "... and the default means of allowing user input is via a 
TextField". The statement is a bit confusing, but the way I read it is 
that there could be other ways to input the data - other than the text 
field.

If we add the string text property to the public API, though, we would 
indirectly disable introducing other editors.

Shura.

>
> I run the following sample code ComboBox01E
> //===============================================================
> import javafx.application.Application;
> import javafx.beans.value.ChangeListener;
> import javafx.beans.value.ObservableValue;
> import javafx.scene.Scene;
> import javafx.scene.control.ComboBox;
> import javafx.scene.layout.HBox;
> import javafx.stage.Stage;
>
> public class ComboBox01E extends Application {
> // Integer ComboBox
>
> public void start(Stage stage) throws Exception {
> HBox root = new HBox();
> Scene scene = new Scene( root, 240, 240 );
> stage.setScene( scene );
> //
> ComboBox<Integer> comboBox = new ComboBox<Integer>();
> comboBox.getItems().addAll( 111, 222, 333, 444, 555, 666, 777, 888, 999 );
> comboBox.setEditable(true);
> comboBox.valueProperty().addListener( selectedValue );
> //
> root.getChildren().add( comboBox );
> stage.setTitle("ComboBox01E");
> stage.show();
> }
> //
> ChangeListener<Number> selectedValue = new ChangeListener<Number>() {
> public void changed( ObservableValue<? extends Number> value, Number
> oldVal, Number newVal ) {
> System.out.println( " oldVal="+ oldVal +" newVal="+ newVal );
> }
> };
> //
> public static void main(String[] args) {
> launch(args);
> }
> }
> //===============================================================
>
> The type of this editable combobox is Integer
> When I enter the numeric characters such as 111 then hit Enter key
> the exception rises:
>
> java.lang.ClassCastException: java.lang.String cannot be cast to
> java.lang.Number
> at ComboBox01E$1.changed(ComboBox01E.java:1)
> at
> com.sun.javafx.binding.ExpressionHelper$Generic.fireValueChangedEvent(ExpressionHelper.java:367)
>
> at
> com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:100)
>
> at
> javafx.beans.property.ObjectPropertyBase.fireValueChangedEvent(ObjectPropertyBase.java:123)
>
> at
> javafx.beans.property.ObjectPropertyBase.markInvalid(ObjectPropertyBase.java:130)
>
> at
> javafx.beans.property.ObjectPropertyBase.set(ObjectPropertyBase.java:163)
> at javafx.scene.control.ComboBoxBase$1.set(ComboBoxBase.java:86)
> at javafx.scene.control.ComboBoxBase.setValue(ComboBoxBase.java:94)
>
> Best regards
> Tadashi Ohmura
>
> (2012/03/14 20:28), Alexandre (Shura) Iline wrote:
>> Jonathan,
>>
>> Judging from the javadoc, combobox component could handle different
>> types - not only String. I could redefine the skin, I assume, and have
>> any editor within it, so, there may not be a text field to get a text
>> from in the first place.
>>
>> Should the "text" property be of a type T and named somehow else?
>>
>> Shura.
>>
>> On 03/14/2012 04:53 AM, Jonathan Giles wrote:
>>> Hi all (yet again),
>>>
>>> A quick one this time: http://javafx-jira.kenai.com/browse/RT-19589
>>>
>>> I'm wanting to add a text property to ComboBox, to allow for people to
>>> easily set the text in the ComboBox without committing it to being a
>>> value. More importantly, this also allows for developers to extract the
>>> content of the ComboBox TextField without having to have end-users press
>>> the Enter key to commit the text into the value property.
>>>
>>> Without this end users who want to support Enter-less committing of
>>> content have to reach into the ComboBox skin, which is not particularly
>>> pleasant.
>>>
>>> Any thoughts?
>>>
>>
>>
>



More information about the openjfx-dev mailing list