[zhyi~subversion:55] JarDependencyWalker final version.

  • From: zhyi@kenai.com
  • To: commits@zhyi.kenai.com
  • Subject: [zhyi~subversion:55] JarDependencyWalker final version.
  • Date: Sun, 29 Nov 2009 07:24:14 +0000

Project:    zhyi
Repository: subversion
Revision:   55
Author:     zhyi
Date:       2009-11-29 07:24:11 UTC
Link:       

Log Message:
------------
JarDependencyWalker final version.


Revisions:
----------
55


Modified Paths:
---------------
JarDependencyWalker/nbproject/project.properties
JarDependencyWalker/src/com/zhyi/jdw/ui/JarDependencyWalkerFrame.java
JarDependencyWalker
JarDependencyWalker/src/com/zhyi/jdw/ui/JarDependencyWalkerFrame.form


Added Paths:
------------
JarDependencyWalker/src/com/zhyi/jdw/common
JarDependencyWalker/src/com/zhyi/jdw/common/JarFileWrapper.java


Diffs:
------
Index: JarDependencyWalker/nbproject/project.properties
===================================================================
--- JarDependencyWalker/nbproject/project.properties    (revision 54)
+++ JarDependencyWalker/nbproject/project.properties    (revision 55)
@@ -46,7 +46,7 @@
 javadoc.use=true
 javadoc.version=false
 javadoc.windowtitle=
-main.class=
+main.class=com.zhyi.jdw.ui.JarDependencyWalkerFrame
 manifest.file=manifest.mf
 meta.inf.dir=${src.dir}/META-INF
 platform.active=default_platform
Index: JarDependencyWalker/src/com/zhyi/jdw/common/JarFileWrapper.java
===================================================================
--- JarDependencyWalker/src/com/zhyi/jdw/common/JarFileWrapper.java     
(revision 0)
+++ JarDependencyWalker/src/com/zhyi/jdw/common/JarFileWrapper.java     
(revision 55)
@@ -0,0 +1,46 @@
+/*
+ * FileWrapper.java
+ *
+ * Copyright (C) 2009 Zhao Yi
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.zhyi.jdw.common;
+
+import com.zhyi.zylib.toolkit.FileToolkit;
+import java.util.jar.JarFile;
+
+/**
+ * Wraps {@code java.util.jar.JarFile} for providing the file name instead of
+ * the file path via {@code toString()}.
+ * @author Zhao Yi
+ */
+public class JarFileWrapper {
+
+    private JarFile jar;
+
+    public JarFileWrapper(JarFile jar) {
+        this.jar = jar;
+    }
+
+    public JarFile getJarFile() {
+        return jar;
+    }
+
+    @Override
+    public String toString() {
+        return FileToolkit.getFileNameFromPath(jar.getName());
+    }
+
+}
Index: JarDependencyWalker/src/com/zhyi/jdw/ui/JarDependencyWalkerFrame.java
===================================================================
--- JarDependencyWalker/src/com/zhyi/jdw/ui/JarDependencyWalkerFrame.java     
  (revision 54)
+++ JarDependencyWalker/src/com/zhyi/jdw/ui/JarDependencyWalkerFrame.java     
  (revision 55)
@@ -18,12 +18,37 @@
  */
 package com.zhyi.jdw.ui;
 
+import com.zhyi.jdw.common.JarFileWrapper;
+import com.zhyi.zylib.toolkit.ExceptionToolkit;
 import com.zhyi.zylib.toolkit.SwingToolkit;
+import java.awt.Component;
 import java.awt.EventQueue;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+import java.util.Enumeration;
+import java.util.Vector;
+import java.util.jar.JarFile;
+import javax.swing.DefaultListModel;
 import javax.swing.GroupLayout;
 import javax.swing.GroupLayout.Alignment;
+import javax.swing.JButton;
+import javax.swing.JFileChooser;
 import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JOptionPane;
+import javax.swing.JScrollPane;
+import javax.swing.JSeparator;
+import javax.swing.JTable;
+import javax.swing.JTextField;
+import javax.swing.LayoutStyle.ComponentPlacement;
+import javax.swing.SwingConstants;
+import javax.swing.SwingWorker;
 import javax.swing.WindowConstants;
+import javax.swing.filechooser.FileNameExtensionFilter;
+import javax.swing.table.DefaultTableModel;
+import javax.swing.table.TableColumnModel;
 
 /**
  * The main frame.
@@ -31,6 +56,14 @@
  */
 public class JarDependencyWalkerFrame extends JFrame {
 
+    private final Vector<String> columnNames = new Vector<String>();
+    {
+        columnNames.add("Jar File");
+        columnNames.add("Depends On");
+    };
+
+    private DefaultListModel listModel = new DefaultListModel();
+
     public JarDependencyWalkerFrame() {
         initComponents();
     }
@@ -44,24 +77,225 @@
     // <editor-fold defaultstate="collapsed" desc="Generated 
Code">//GEN-BEGIN:initComponents
     private void initComponents() {
 
+        jarFileChooser = new JFileChooser();
+        jarListScrollPane = new JScrollPane();
+        jarList = new JList(listModel);
+        addButton = new JButton();
+        removeButton = new JButton();
+        separator = new JSeparator();
+        goButton = new JButton();
+        resultTableScrollPane = new JScrollPane();
+        resultTable = new JTable();
+        summaryLabel = new JLabel();
+        summaryTextField = new JTextField();
+        copyButton = new JButton();
+        jButton1 = new JButton();
+
+        jarFileChooser.setMultiSelectionEnabled(true);
+        jarFileChooser.setFileFilter(
+            new FileNameExtensionFilter("Jar File (*.jar)", "jar"));
+
         setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
         setTitle("Jar Dependency Walker");
         setResizable(false);
 
+        jarList.setLayoutOrientation(JList.HORIZONTAL_WRAP);
+        jarList.setVisibleRowCount(-1);
+        jarListScrollPane.setViewportView(jarList);
+
+        addButton.setText("Add...");
+        addButton.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent evt) {
+                addButtonActionPerformed(evt);
+            }
+        });
+
+        removeButton.setText("Remove");
+        removeButton.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent evt) {
+                removeButtonActionPerformed(evt);
+            }
+        });
+
+        goButton.setText("Go");
+        goButton.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent evt) {
+                goButtonActionPerformed(evt);
+            }
+        });
+
+        updateResult(new Result());
+        resultTableScrollPane.setViewportView(resultTable);
+
+        summaryLabel.setText("Summary:");
+
+        summaryTextField.setEditable(false);
+
+        copyButton.setText("Copy");
+        copyButton.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent evt) {
+                copyButtonActionPerformed(evt);
+            }
+        });
+
+        jButton1.setText("About...");
+        jButton1.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent evt) {
+                jButton1ActionPerformed(evt);
+            }
+        });
+
         GroupLayout layout = new GroupLayout(getContentPane());
         getContentPane().setLayout(layout);
         layout.setHorizontalGroup(
             layout.createParallelGroup(Alignment.LEADING)
-            .addGap(0, 400, Short.MAX_VALUE)
+            .addGroup(layout.createSequentialGroup()
+                .addGroup(layout.createParallelGroup(Alignment.LEADING)
+                    .addComponent(separator, GroupLayout.DEFAULT_SIZE, 470, 
Short.MAX_VALUE)
+                    .addGroup(layout.createSequentialGroup()
+                        .addContainerGap()
+                        .addComponent(summaryLabel)
+                        .addPreferredGap(ComponentPlacement.RELATED)
+                        .addComponent(summaryTextField, 
GroupLayout.DEFAULT_SIZE, 234, Short.MAX_VALUE)
+                        .addPreferredGap(ComponentPlacement.RELATED)
+                        .addComponent(copyButton)
+                        .addPreferredGap(ComponentPlacement.RELATED)
+                        .addComponent(jButton1))
+                    .addGroup(layout.createSequentialGroup()
+                        .addContainerGap()
+                        
.addGroup(layout.createParallelGroup(Alignment.LEADING)
+                            .addComponent(resultTableScrollPane, 
GroupLayout.DEFAULT_SIZE, 460, Short.MAX_VALUE)
+                            .addGroup(layout.createSequentialGroup()
+                                
.addGroup(layout.createParallelGroup(Alignment.LEADING)
+                                    .addComponent(addButton)
+                                    .addComponent(removeButton))
+                                .addPreferredGap(ComponentPlacement.RELATED)
+                                .addComponent(jarListScrollPane, 
GroupLayout.DEFAULT_SIZE, 334, Short.MAX_VALUE)
+                                .addPreferredGap(ComponentPlacement.RELATED)
+                                .addComponent(goButton)))))
+                .addContainerGap())
         );
+
+        layout.linkSize(SwingConstants.HORIZONTAL, new Component[] 
{addButton, removeButton});
+
+        layout.linkSize(SwingConstants.HORIZONTAL, new Component[] 
{copyButton, jButton1});
+
         layout.setVerticalGroup(
             layout.createParallelGroup(Alignment.LEADING)
-            .addGap(0, 300, Short.MAX_VALUE)
+            .addGroup(layout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(layout.createParallelGroup(Alignment.LEADING, 
false)
+                    .addComponent(goButton, GroupLayout.DEFAULT_SIZE, 
GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                    .addComponent(jarListScrollPane)
+                    .addGroup(layout.createSequentialGroup()
+                        .addComponent(addButton)
+                        .addPreferredGap(ComponentPlacement.RELATED)
+                        .addComponent(removeButton)))
+                .addPreferredGap(ComponentPlacement.RELATED)
+                .addComponent(separator, GroupLayout.PREFERRED_SIZE, 2, 
GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(ComponentPlacement.RELATED)
+                .addComponent(resultTableScrollPane, 
GroupLayout.DEFAULT_SIZE, 185, Short.MAX_VALUE)
+                .addPreferredGap(ComponentPlacement.RELATED)
+                .addGroup(layout.createParallelGroup(Alignment.BASELINE)
+                    .addComponent(summaryLabel)
+                    .addComponent(summaryTextField, 
GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, 
GroupLayout.PREFERRED_SIZE)
+                    .addComponent(copyButton)
+                    .addComponent(jButton1))
+                .addContainerGap())
         );
 
         pack();
     }// </editor-fold>//GEN-END:initComponents
 
+    private void addButtonActionPerformed(ActionEvent evt) 
{//GEN-FIRST:event_addButtonActionPerformed
+        if (jarFileChooser.showOpenDialog(this) == 
JFileChooser.APPROVE_OPTION) {
+            for (File jar : jarFileChooser.getSelectedFiles()) {
+                try {
+                    listModel.addElement(new JarFileWrapper(new 
JarFile(jar)));
+                } catch (Exception ex) {
+                    JOptionPane.showMessageDialog(this, ex.getMessage(),
+                            "Error", JOptionPane.ERROR_MESSAGE);
+                }
+            }
+        }
+    }//GEN-LAST:event_addButtonActionPerformed
+
+    private void removeButtonActionPerformed(ActionEvent evt) 
{//GEN-FIRST:event_removeButtonActionPerformed
+        for (int i : jarList.getSelectedIndices()) {
+            listModel.remove(i);
+        }
+    }//GEN-LAST:event_removeButtonActionPerformed
+
+    private void goButtonActionPerformed(ActionEvent evt) 
{//GEN-FIRST:event_goButtonActionPerformed
+        goButton.setEnabled(false);
+        new SwingWorker<Result, Void>() {
+
+            @Override
+            protected Result doInBackground() throws Exception {
+                Result result = new Result();
+                Vector<Vector<String>> results = new 
Vector<Vector<String>>();
+                Enumeration<?> e = listModel.elements();
+                while (e.hasMoreElements()) {
+                    JarFileWrapper jarWrapper = (JarFileWrapper) 
e.nextElement();
+                    JarFile jar = jarWrapper.getJarFile();
+                    Vector<String> row = new Vector<String>();
+                    row.add(jarWrapper.toString());
+                    String libs = 
jar.getManifest().getMainAttributes().getValue("Class-Path");
+                    row.add(libs);
+                    result.data.add(row);
+                    result.summary += (libs + " ");
+                }
+                result.summary = result.summary.substring(
+                        0, result.summary.length() - 1);
+                return result;
+            }
+
+            @Override
+            protected void done() {
+                try {
+                    updateResult(get());
+                } catch (Exception ex) {
+                    JOptionPane.showMessageDialog(
+                            JarDependencyWalkerFrame.this,
+                            ExceptionToolkit.getRootCause(ex).getMessage(),
+                            "Error", JOptionPane.ERROR_MESSAGE);
+                } finally {
+                    goButton.setEnabled(true);
+                }
+            }
+
+        }.execute();
+    }//GEN-LAST:event_goButtonActionPerformed
+
+    private void copyButtonActionPerformed(ActionEvent evt) 
{//GEN-FIRST:event_copyButtonActionPerformed
+        summaryTextField.copy();
+    }//GEN-LAST:event_copyButtonActionPerformed
+
+    private void jButton1ActionPerformed(ActionEvent evt) 
{//GEN-FIRST:event_jButton1ActionPerformed
+        JOptionPane.showMessageDialog(this,
+                "<html><h2>Jar Dependency Walker</h2>"
+                + "A tool for analyzing Jar dependencies from 
manifests.<br><br>"
+                + "Copyright &copy; 2009 Zhao Yi (shinzey@msn.com)<br>"
+                + "Licensed under GNU General Public License Version 
3</html>",
+                "About Jar Dependency Walker", 
JOptionPane.INFORMATION_MESSAGE);
+    }//GEN-LAST:event_jButton1ActionPerformed
+
+    private void updateResult(Result result) {
+        resultTable.setModel(new DefaultTableModel(result.data, columnNames) 
{
+
+            @Override
+            public boolean isCellEditable(int row, int column) {
+                return false;
+            }
+
+        });
+        int tableWidth = 
resultTable.getPreferredScrollableViewportSize().width;
+        TableColumnModel columnModel = resultTable.getColumnModel();
+        columnModel.getColumn(0).setPreferredWidth(150);
+        columnModel.getColumn(1).setPreferredWidth(tableWidth - 150);
+        summaryTextField.setText(result.summary);
+    }
+
     public static void main(String[] args) {
         SwingToolkit.initApplication();
         EventQueue.invokeLater(new Runnable() {
@@ -77,6 +311,26 @@
     }
 
     // Variables declaration - do not modify//GEN-BEGIN:variables
+    private JButton addButton;
+    private JButton copyButton;
+    private JButton goButton;
+    private JButton jButton1;
+    private JFileChooser jarFileChooser;
+    private JList jarList;
+    private JScrollPane jarListScrollPane;
+    private JButton removeButton;
+    private JTable resultTable;
+    private JScrollPane resultTableScrollPane;
+    private JSeparator separator;
+    private JLabel summaryLabel;
+    private JTextField summaryTextField;
     // End of variables declaration//GEN-END:variables
 
+    private class Result {
+
+        private Vector<Vector<String>> data = new Vector<Vector<String>>();
+        private String summary = "";
+
+    }
+
 }
Index: JarDependencyWalker/src/com/zhyi/jdw/ui/JarDependencyWalkerFrame.form
===================================================================
--- JarDependencyWalker/src/com/zhyi/jdw/ui/JarDependencyWalkerFrame.form     
  (revision 54)
+++ JarDependencyWalker/src/com/zhyi/jdw/ui/JarDependencyWalkerFrame.form     
  (revision 55)
@@ -1,6 +1,16 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 
 <Form version="1.3" maxVersion="1.7" 
type="org.netbeans.modules.form.forminfo.JFrameFormInfo">
+  <NonVisualComponents>
+    <Component class="javax.swing.JFileChooser" name="jarFileChooser">
+      <Properties>
+        <Property name="multiSelectionEnabled" type="boolean" value="true"/>
+      </Properties>
+      <AuxValues>
+        <AuxValue name="JavaCodeGenerator_InitCodePost" 
type="java.lang.String" value="jarFileChooser.setFileFilter(&#xa;        new 
FileNameExtensionFilter(&quot;Jar File (*.jar)&quot;, &quot;jar&quot;));"/>
+      </AuxValues>
+    </Component>
+  </NonVisualComponents>
   <Properties>
     <Property name="defaultCloseOperation" type="int" value="3"/>
     <Property name="title" type="java.lang.String" value="Jar Dependency 
Walker"/>
@@ -24,13 +34,153 @@
   <Layout>
     <DimensionLayout dim="0">
       <Group type="103" groupAlignment="0" attributes="0">
-          <EmptySpace min="0" pref="400" max="32767" attributes="0"/>
+          <Group type="102" attributes="0">
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Component id="separator" alignment="0" pref="470" 
max="32767" attributes="0"/>
+                  <Group type="102" alignment="0" attributes="0">
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Component id="summaryLabel" min="-2" max="-2" 
attributes="0"/>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Component id="summaryTextField" pref="234" 
max="32767" attributes="0"/>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Component id="copyButton" linkSize="2" min="-2" 
max="-2" attributes="0"/>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Component id="jButton1" linkSize="2" min="-2" 
max="-2" attributes="0"/>
+                  </Group>
+                  <Group type="102" alignment="0" attributes="0">
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Group type="103" groupAlignment="0" attributes="0">
+                          <Component id="resultTableScrollPane" 
alignment="0" pref="460" max="32767" attributes="0"/>
+                          <Group type="102" alignment="0" attributes="0">
+                              <Group type="103" groupAlignment="0" 
attributes="0">
+                                  <Component id="addButton" linkSize="1" 
alignment="0" min="-2" max="-2" attributes="0"/>
+                                  <Component id="removeButton" linkSize="1" 
alignment="0" min="-2" max="-2" attributes="0"/>
+                              </Group>
+                              <EmptySpace max="-2" attributes="0"/>
+                              <Component id="jarListScrollPane" pref="334" 
max="32767" attributes="0"/>
+                              <EmptySpace max="-2" attributes="0"/>
+                              <Component id="goButton" min="-2" max="-2" 
attributes="0"/>
+                          </Group>
+                      </Group>
+                  </Group>
+              </Group>
+              <EmptySpace max="-2" attributes="0"/>
+          </Group>
       </Group>
     </DimensionLayout>
     <DimensionLayout dim="1">
       <Group type="103" groupAlignment="0" attributes="0">
-          <EmptySpace min="0" pref="300" max="32767" attributes="0"/>
+          <Group type="102" alignment="0" attributes="0">
+              <EmptySpace max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="0" max="-2" attributes="0">
+                  <Component id="goButton" max="32767" attributes="1"/>
+                  <Component id="jarListScrollPane" alignment="0" 
max="32767" attributes="1"/>
+                  <Group type="102" alignment="0" attributes="0">
+                      <Component id="addButton" min="-2" max="-2" 
attributes="0"/>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Component id="removeButton" min="-2" max="-2" 
attributes="0"/>
+                  </Group>
+              </Group>
+              <EmptySpace max="-2" attributes="0"/>
+              <Component id="separator" min="-2" pref="2" max="-2" 
attributes="0"/>
+              <EmptySpace max="-2" attributes="0"/>
+              <Component id="resultTableScrollPane" pref="185" max="32767" 
attributes="0"/>
+              <EmptySpace max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="3" attributes="0">
+                  <Component id="summaryLabel" alignment="3" min="-2" 
max="-2" attributes="0"/>
+                  <Component id="summaryTextField" alignment="3" min="-2" 
max="-2" attributes="0"/>
+                  <Component id="copyButton" alignment="3" min="-2" max="-2" 
attributes="0"/>
+                  <Component id="jButton1" alignment="3" min="-2" max="-2" 
attributes="0"/>
+              </Group>
+              <EmptySpace max="-2" attributes="0"/>
+          </Group>
       </Group>
     </DimensionLayout>
   </Layout>
+  <SubComponents>
+    <Container class="javax.swing.JScrollPane" name="jarListScrollPane">
+      <AuxValues>
+        <AuxValue name="autoScrollPane" type="java.lang.Boolean" 
value="true"/>
+      </AuxValues>
+
+      <Layout 
class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
+      <SubComponents>
+        <Component class="javax.swing.JList" name="jarList">
+          <Properties>
+            <Property name="layoutOrientation" type="int" value="2"/>
+            <Property name="visibleRowCount" type="int" value="-1"/>
+          </Properties>
+          <AuxValues>
+            <AuxValue name="JavaCodeGenerator_CreateCodeCustom" 
type="java.lang.String" value="new JList(listModel);"/>
+          </AuxValues>
+        </Component>
+      </SubComponents>
+    </Container>
+    <Component class="javax.swing.JButton" name="addButton">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Add..."/>
+      </Properties>
+      <Events>
+        <EventHandler event="actionPerformed" 
listener="java.awt.event.ActionListener" 
parameters="java.awt.event.ActionEvent" handler="addButtonActionPerformed"/>
+      </Events>
+    </Component>
+    <Component class="javax.swing.JButton" name="removeButton">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Remove"/>
+      </Properties>
+      <Events>
+        <EventHandler event="actionPerformed" 
listener="java.awt.event.ActionListener" 
parameters="java.awt.event.ActionEvent" 
handler="removeButtonActionPerformed"/>
+      </Events>
+    </Component>
+    <Component class="javax.swing.JSeparator" name="separator">
+    </Component>
+    <Component class="javax.swing.JButton" name="goButton">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Go"/>
+      </Properties>
+      <Events>
+        <EventHandler event="actionPerformed" 
listener="java.awt.event.ActionListener" 
parameters="java.awt.event.ActionEvent" handler="goButtonActionPerformed"/>
+      </Events>
+    </Component>
+    <Container class="javax.swing.JScrollPane" name="resultTableScrollPane">
+      <AuxValues>
+        <AuxValue name="autoScrollPane" type="java.lang.Boolean" 
value="true"/>
+      </AuxValues>
+
+      <Layout 
class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
+      <SubComponents>
+        <Component class="javax.swing.JTable" name="resultTable">
+          <AuxValues>
+            <AuxValue name="JavaCodeGenerator_InitCodePre" 
type="java.lang.String" value="updateResult(new Result());"/>
+          </AuxValues>
+        </Component>
+      </SubComponents>
+    </Container>
+    <Component class="javax.swing.JLabel" name="summaryLabel">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Summary:"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JTextField" name="summaryTextField">
+      <Properties>
+        <Property name="editable" type="boolean" value="false"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JButton" name="copyButton">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Copy"/>
+      </Properties>
+      <Events>
+        <EventHandler event="actionPerformed" 
listener="java.awt.event.ActionListener" 
parameters="java.awt.event.ActionEvent" handler="copyButtonActionPerformed"/>
+      </Events>
+    </Component>
+    <Component class="javax.swing.JButton" name="jButton1">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="About..."/>
+      </Properties>
+      <Events>
+        <EventHandler event="actionPerformed" 
listener="java.awt.event.ActionListener" 
parameters="java.awt.event.ActionEvent" handler="jButton1ActionPerformed"/>
+      </Events>
+    </Component>
+  </SubComponents>
 </Form>

Property changes on: JarDependencyWalker
___________________________________________________________________
Added: svn:ignore
   + build
dist







[zhyi~subversion:55] JarDependencyWalker final version.

zhyi 11/29/2009
  • Mysql
  • Glassfish
  • Jruby
  • Rails
  • Nblogo
Terms of Use; Privacy Policy;
© 2010, Oracle Corporation and/or its affiliates
(revision 20120518.3c65429)
 
 
Close
loading
Please Confirm
Close