Jun 8, 2011

JavaFX SplitPane usage

Так получилось, что API этого полезнейшего компонента был изменен в последний момент перед релизом JavaFX 2.0 Beta. В результате мы получили следующий пример в официальной документации:




 SplitPane sp = new SplitPane();
 sp.setLeft(new Button("LEFT BUTTON"));
 sp.setRight(new Button("RIGHT BUTTON"));
 sp.setDividerLocation(0.4f);
 

Если вы попробуете использовать этот пример в своей программе, то столкнетесь с неприятной проблемой. Класс SplitPane не имеет методов setLeft или setRight. Кто виноват и что делать? Прежде всего не следует нервничать. Создатели компонента посчитали, использование методов setLeft, setRight, setTop, setBottom не очень удобным и хорошим с точки зрения использования. Более того, этот вариант API плохо масштабируется. Представим, что нам нужно разделить панель не на 2 участка, а на 3 или более? Решение такой задачи может оказаться очень некрасивым с таким API. Именно поэтому в релизе было решено использовать другой, более гибкий подход.
В SplitPane были добавлены методы для управления внутренним списком компонентов. Таким образом пользователь просто добавляет необходимое количество компонентов в список и указывает какая ориентация у SplitPane. Далее можно посмотреть вариант кода, который будет работать на текущей версии JavaFX:


        SplitPane p1 = new SplitPane();
        SplitPane p2 = new SplitPane();
        SplitPane p3 = new SplitPane();

        p1.getItems().addAll(p2, p3);
        p2.setOrientation(Orientation.VERTICAL);
        p3.setOrientation(Orientation.VERTICAL);
        p2.getItems().addAll(new Label("1"), new Label("2"));
        p3.getItems().addAll(new Label("3"), new Label("4"), new Label("5"));

Если выполнить этот код, то мы увидим примерно следующую картинку:

4 comments:

acepsut said...

Hi,

I have read about your interesting article for SplitPane, I wonder if you can help me with this issue:I would like to add a VERTICAL_SPLITTED pane by click on a button.
Each click add a sub-pane, up to max 10.
Can you please post an example of how to get this by using SplitPane in JavaFX?
Thank you very much!

acepsut said...

Hi,

I have read about your interesting article for SplitPane, I wonder if you can help me with this issue:I would like to add a VERTICAL_SPLITTED pane by click on a button.
Each click add a sub-pane, up to max 10.
Can you please post an example of how to get this by using SplitPane in JavaFX?
Thank you very much!

acepsut said...

Hi,

I have read about your interesting article for SplitPane, I wonder if you can help me with this issue:I would like to add a VERTICAL_SPLITTED pane by click on a button.
Each click add a sub-pane, up to max 10.
Can you please post an example of how to get this by using SplitPane in JavaFX?
Thank you very much!
Alberto

acepsut said...

Hi,

I have read about your interesting article for SplitPane, I wonder if you can help me with this issue:I would like to add a VERTICAL_SPLITTED pane by click on a button.
Each click add a sub-pane, up to max 10.
Can you please post an example of how to get this by using SplitPane in JavaFX?
Thank you very much!
Alberto