powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Java fx получить содержимое панели
8 сообщений из 8, страница 1 из 1
Java fx получить содержимое панели
    #39671496
Павел Гужанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.

Имеется TabPane с вкладками Tab. Мне необходимо создать новую вкладки и скопировать на нее содержимое (контролы и их размещение, а в идеале и содержимое, если пользователь в них что-то изменил) одной из существующих вкладок.
Подскажите, как это можно реализовать.
...
Рейтинг: 0 / 0
Java fx получить содержимое панели
    #39671497
Павел Гужанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Новую вкладку создать легко. Добавить на нее контрол - тоже проблем не составляет. Вопрос в том, как скопировать достаточно сложную форму полностью.
...
Рейтинг: 0 / 0
Java fx получить содержимое панели
    #39671531
Павел Гужанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нашел вот такой класс, добавил его в проект:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
import java.util.ArrayList;
import java.util.List;

import javafx.scene.Node;
import javafx.scene.layout.Pane;

public class NodeUtils {
	public static <T extends Pane> List<Node> paneNodes(T parent) {
        return paneNodes(parent, new ArrayList<Node>());
    }

    private static <T extends Pane> List<Node> paneNodes(T parent, List<Node> nodes) {
        for (Node node : parent.getChildren()) {
            if (node instanceof Pane) {
                paneNodes((Pane) node, nodes);
            } else {
                nodes.add(node);
            }
        }
        return nodes;
    }
}



Использую вот таким образом:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
@FXML
    private void addTab() {
    	List<Node> nodes = NodeUtils.paneNodes(newRequestAncor);
    	Tab tabP = new Tab("Новая вкладка");
    	HBox hbox = new HBox();
        hbox.getChildren().addAll(nodes);
        tabP.setContent(hbox);
    	mainTabPane.getTabs().addAll(tabP);
    }



Работает следующим образом:
1. Вкладка, на которой находится newRequestAncor, и которую я пытаюсь скопировать, становится пустой
2. На новую вкладку заносятся компоненты из копируемой вкладки, но размещение не копируется и на форме получается каша.

Мне же нужно, чтобы компоненты скопировались вместе с размещением, и чтобы исходная вкладка осталась.
Как мне это победить?
...
Рейтинг: 0 / 0
Java fx получить содержимое панели
    #39671540
Valery Shiskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Гужанов,
Если, к прммеру у Вас на некотором Pane находится Button, то как Вы эту кнопку скопируете? Если требуется копировать только объекты типа Pane без их содержимого, отличного от Pane, то все можно сделать.
...
Рейтинг: 0 / 0
Java fx получить содержимое панели
    #39671543
Павел Гужанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В список нодов из показанного мной кода попадают все ноды, в том числе и button. И они вставляются в новую вкладку. Но почему-то удаляются из исходной вкладки
...
Рейтинг: 0 / 0
Java fx получить содержимое панели
    #39671547
Valery Shiskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Гужанов,

Помимо всего прочего, Вы пытаетесь копировать ССЫЛКИ на узлы. При этом, попытка добавить сhild элемент одного Pane приводит к тому. что автоматически удаляется этот child из списка children исходного Pane. Общее правило: Объект типа Node может быть в одном и только одном списке children.
...
Рейтинг: 0 / 0
Java fx получить содержимое панели
    #39671560
Павел Гужанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery ShiskinПавел Гужанов,

Помимо всего прочего, Вы пытаетесь копировать ССЫЛКИ на узлы. При этом, попытка добавить сhild элемент одного Pane приводит к тому. что автоматически удаляется этот child из списка children исходного Pane. Общее правило: Объект типа Node может быть в одном и только одном списке children.
Так, это прояснило, почему исходная панель становится пустой. Спасибо.
А можно как-то скопировать (клонировать) не ссылки, а сами узлы?
...
Рейтинг: 0 / 0
Java fx получить содержимое панели
    #39671572
Valery Shiskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Гужанов,

Можно. Но надо учитывать, что, Вам потребуется самому создать что-то вроде метода cloneNode(source-node) для каждого, используемого Вами узла. Например, Button имеет свойство graphic, содержащее null или объект Node. Поэтому, чтобы создать клон объекта Button, Вам потребуется создать новый объект типа Button, создать новый объект, соответствующий свойству graphic и назначит его свойству graphic новому Button. Другие javafx nodes могут иметь еще более сложную структуру. К сожалению javafx не обязывает реализовывать метод clone для объектов типа Node. Да это, в принципе невозможно.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Java fx получить содержимое панели
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]