Сериализация Java Swing компонентов на примере выпадающего списка JComboBox

Сериализация Java Swing компонентов на примере выпадающего списка JComboBox Совсем недавно, разбирая с товарищем коллегой проблему одну, с удивлением для себя обнаружил замечательную вещь. Оказывается компоненты Java Swing можно сериализовать. Буквально за пять минут набросал пример, который создает компонент JComboBox, затем сериализует его в поток, а поток пишется в файл. Файл в конечном итоге можно открыть обыкновенным редактором и увидеть то, что нам насериализовал Java Swing. Но самое интересное, всё получившееся, я имею в виду файл с сериализованным JComboBox — можно прочитать и создать из него новенький выпадающий список, а потом как ни в чем не бывало разместить его на форме. Вот такое волшебство Java Swing. Конечно с практической точки зрения пользы от этого с позволения сказать открытия нет — зачем сериализовывать целые компоненты, когда делать это нужно только с данными. Сохраняем данные в файлик, а при необходимости восстанавливаем их — так и места меньше заниматьяс будет, да и много еще каких плюсов. Однако, сам факт такой интересной возможности меня удивил.

Давайте посмотрим, что же нужно сделать, чтобы выполнить сериализацию Java Swing компонента под названием JComboBox. Для начала нужно разделить весь процесс на две части. Первая часть это сериализация. Здесь мы сериализуем компонент, то есть сохраняем все его свойства в форме, удобной для записи к примеру в строку или файл. В нашем случае я использовал файл, чтобы можно было легко посмотреть на результат работы. Как только компонент JComboBox сериализовался в файл, удаляем его с формы для чистоты эксперимента. Далее идет вторая часть эксперимента — десериализация Java Swing компонента JComboBox из файла и размещение его на форме.

import java.awt.Dimension;
import java.awt.Font;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

import javax.swing.JComboBox;
import javax.swing.JFrame;

public class TestFrame extends JFrame {

	public TestFrame() {
		super("Тестовое окно");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		Font font = new Font("Verdana", Font.PLAIN, 25);

		String[] items = { "Item 1", "Item 2", "Item 3"};

		JComboBox combo = new JComboBox(items);
		combo.setFont(font);
		getContentPane().add(combo);

		try {
			File file = new File("combobox.txt");

			if (!file.exists()) {
				file.createNewFile();
			}

			FileOutputStream fileOut = new FileOutputStream(file);
			ObjectOutputStream out = new ObjectOutputStream(fileOut);
			out.writeObject(combo);

			getContentPane().remove(combo);

			FileInputStream fileIn = new FileInputStream(file);
			ObjectInputStream in = new ObjectInputStream(fileIn);

			combo = (JComboBox) in.readObject();

			getContentPane().add(combo);
		} catch (Exception e) {
			e.printStackTrace();
		}

		setPreferredSize(new Dimension(220, 100));
		pack();
		setLocationRelativeTo(null);
		setVisible(true);
	}

	public static void main(String[] args) {
		javax.swing.SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				JFrame.setDefaultLookAndFeelDecorated(true);
				new TestFrame();
			}
		});
	}
}
Advertisements

2 Responses to Сериализация Java Swing компонентов на примере выпадающего списка JComboBox

  1. Екатерина says:

    Здравствуйте.
    Не подскажите как вместо «Item…» вывести id_kategory из таблицы kategory, которая существует в postgresql?

    спасибо Вам за ваш труд:)

  2. Gargo says:

    Простите, а как долго вы программируете на Java? Или лучше как долго программируете вообще? Если вы не в курсе, то потоки ввода-вывода за собой надо закрывать

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: