2011-11-26 1 views
3

У меня есть вопрос относительно доступа к элементам GUI. Например, имея простую графическую программу на Java, как я могу читать и сохранять иерархию элементов Swing GUI на дереве (например, в главном окне, фреймах, кнопках, текстовом поле, combobox и т. Д.).Java читает и сохраняет элементы GUI

+0

вы говорите о доступе к иерархии или сериализации его на диск, а затем воссоздавая его позже? – Bill

+0

Во-первых, мне нужно получить доступ к этой иерархии, а позже мне может понадобиться также сериализовать, так как мне придется реализовать другие вещи, чтобы использовать EventDispatcher, чтобы связать (сопоставить) элементы интерфейса UI с конкретными событиями внутри кода. Это моя цель, так возможно? – 100798

+0

Не совсем понятно, к чему вы клоните. Его довольно просто сопоставить события на gui для вызова определенных битов кода, например. – Bill

ответ

4

Свинг-приложения уже организованы на деревьях. 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); 
+0

Также рассмотрите 'XMLEncoder' /' XMLDecoder' как альтернативу 'Serializable'. –

+0

@ GETah: Можете ли вы представить простой (полный) пример того, как это можно сделать с компонентами и подкомпонентами? Я думал, есть ли более автоматизированный и динамический захват этих компонентов GUI (цельное дерево), поскольку это кажется вручную! – 100798

+0

В статье, опубликованной в конце ответа, содержится полностью рабочий пример, который сериализует компоненты GUI и отправляет их по сети. Вы можете использовать тот же механизм для сохранения ваших вещей на диск вместо – GETah