Программа просмотра Java-классов (Java Class Viewer) - Добавление обработанного класса к элементу управления Swing

ОГЛАВЛЕНИЕ

  

Добавление обработанного класса к элементу управления Swing 

Чтобы снизить затраты сил на написание программы просмотрщика Java-классов, jCFL предоставляет набор элементов управления интерфейсом.

1. Элемент управления Tree для создания иерархии компонентов файла класса

Класс org.freeinternals.classfile.ui.JTreeClassFile является подклассом JTree, который принимает объект ClassFile в конструкторе. Он добавить все компоненты класса в элемент управления tree.  

2. Контейнер для интерактивной бинарной программы просмотра файлов классов

Класс org.freeinternals.classfile.ui.JSplitPaneClassFile является подклассом JSplitPane, который разделен на две панели: левая панель является JTreeClassFile, а правая - это двоичный просмотрщик файла класса.  

В то время как мы выбираем каждую компоненту в дереве, соответствующие байты будут подсвечены - потому у нас все интерактивно. 

// JavaClassViewer.src.zip - org.freeinternals.javaclassviewer.Main.open_ClassFile()
private JSplitPaneClassFile cfPane;

private void open_ClassFile(final File file) {
    this.cfPane = new JSplitPaneClassFile(Tool.readClassFile(file));
    this.add(this.cfPane, BorderLayout.CENTER);
    this.resizeForContent();
}

К примеру, после открытия класса File.class (java.io.File), при нашем выборе узла для метода getName(), соответствующие байты будут подсвечены.

Если мы выберем узел name_index, descriptor_index для данного метода, то только секция индексов (для значения 119, 24) будет подсвечена.

Если мы выберем узел code в атрибуте Code, и откроем закладку Opcode, то все машинные коды данного метода будут извлечены. 

Программа просмотра классов Java не предназначена для декомпиляции, она только отображает чистый код и некоторые комментарии соответственно контексту. Вы можете обратиться к спецификации JVM для нахождения значений операционных кодов - ведь извлеченные коды частично читабельны.

  

3. Элемент управления Tree для ZipFile (jar, war, etc.)

Класс org.freeinternals.classfile.ui.JTreeZipFile является подклассом JTree, который принимает ZipFile в конструкторе. Он построит дерево для всех записей в zip-файла. Файл .jar/.war сам по себе также является zip-файлом. 

// JavaClassViewer.src.zip - org.freeinternals.javaclassviewer.Main.open_JarFile()
// Здесь осталась только ключевая логика

private JTreeZipFile zftree;

private void open_JarFile(final File file) {
    this.zftree = new JTreeZipFile(new JarFile(file, false, JarFile.OPEN_READ));
    this.zftreeContainer = new JPanelForTree(this.zftree);
    this.add(this.zftreeContainer, BorderLayout.CENTER);
    this.resizeForContent();
}

А вот как выглядит элемент управления Tree ZipFile.

Также, если мы дважды щелкнем по узлу xxxxx.class, то будет открыто новое окно для файла класса.