У меня есть вопрос относительно доступа к элементам GUI. Например, имея простую графическую программу на Java, как я могу читать и сохранять иерархию элементов Swing GUI на дереве (например, в главном окне, фреймах, кнопках, текстовом поле, combobox и т. Д.).Java читает и сохраняет элементы GUI
ответ
Свинг-приложения уже организованы на деревьях. JFrame является корнем, дети могут посетить:
Component[] components1 = mFrame.getContentPane().getComponents();
Every компонентов имеет суб-компоненты, которые вы можете получить по:
// Assuming component is a container
((Container)component).getComponents();
Сохранение этих элементов в файл простой операции. Вот хороший article, чтобы вы определились.
EDIT Прелесть потоков является то, что вы можете использовать файл так же, как вы бы использовать сокет :) Таким образом, поворачивая ComponentSerializer компонент для сериализации в файл, а не сокет требует 0 изменений :)
Произнесите есть JFrame вы хотите сохранить/чтения в/из файла, выполните следующие действия:
OutputStream output = new FileOutputStream("FileName.bin");
JFrame myFrame = new JFrame();
ComponentSerializer serializer = new ComponentSerializer();
serializer.write(myFrame, output);
// Reading from file
InputStream in = new FileInputStream("FileName.bin");
ComponentSerializer serializer = new ComponentSerializer();
JFrame myFrame = (JFrame) serializer.read(in);
myFrame.setVisible(true);
Также рассмотрите 'XMLEncoder' /' XMLDecoder' как альтернативу 'Serializable'. –
@ GETah: Можете ли вы представить простой (полный) пример того, как это можно сделать с компонентами и подкомпонентами? Я думал, есть ли более автоматизированный и динамический захват этих компонентов GUI (цельное дерево), поскольку это кажется вручную! – 100798
В статье, опубликованной в конце ответа, содержится полностью рабочий пример, который сериализует компоненты GUI и отправляет их по сети. Вы можете использовать тот же механизм для сохранения ваших вещей на диск вместо – GETah
вы говорите о доступе к иерархии или сериализации его на диск, а затем воссоздавая его позже? – Bill
Во-первых, мне нужно получить доступ к этой иерархии, а позже мне может понадобиться также сериализовать, так как мне придется реализовать другие вещи, чтобы использовать EventDispatcher, чтобы связать (сопоставить) элементы интерфейса UI с конкретными событиями внутри кода. Это моя цель, так возможно? – 100798
Не совсем понятно, к чему вы клоните. Его довольно просто сопоставить события на gui для вызова определенных битов кода, например. – Bill