Skip to content

Instantly share code, notes, and snippets.

@yayugu
Created October 22, 2010 07:59
Show Gist options
  • Select an option

  • Save yayugu/640138 to your computer and use it in GitHub Desktop.

Select an option

Save yayugu/640138 to your computer and use it in GitHub Desktop.

Revisions

  1. yayugu created this gist Oct 22, 2010.
    623 changes: 623 additions & 0 deletions gistfile1.txt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,623 @@
    Index: test/main/util/DefragUtilTest.java
    ===================================================================
    --- test/main/util/DefragUtilTest.java (リビジョン 0)
    +++ test/main/util/DefragUtilTest.java (リビジョン 5)
    @@ -0,0 +1,75 @@
    +/*
    + * To change this template, choose Tools | Templates
    + * and open the template in the editor.
    + */
    +
    +package main.util;
    +
    +import org.junit.After;
    +import org.junit.AfterClass;
    +import org.junit.Before;
    +import org.junit.BeforeClass;
    +import org.junit.Test;
    +import static org.junit.Assert.*;
    +
    +/**
    + * デフラグのテストクラスですよ
    + * @author hogehiga
    + */
    +public class DefragUtilTest {
    +
    + public DefragUtilTest() {
    + }
    +
    + @BeforeClass
    + public static void setUpClass() throws Exception {
    + }
    +
    + @AfterClass
    + public static void tearDownClass() throws Exception {
    + }
    +
    + @Before
    + public void setUp() {
    + }
    +
    + @After
    + public void tearDown() {
    + }
    +
    + /**
    + * Test of defrag method, of class DefragUtil.
    + */
    + @Test
    + public void testDefrag() {
    + String before = "defrag";
    + String expResult = "adefgr";
    + String result = DefragUtil.defrag(before);
    + assertEquals(expResult, result);
    +
    + /* null */
    + before = null;
    + expResult = null;
    + result = DefragUtil.defrag(before);
    + assertEquals(expResult, result);
    +
    + /* 空文字列 */
    + before = "";
    + expResult = "";
    + result = DefragUtil.defrag(before);
    + assertEquals(expResult, result);
    +
    + /* ひらがな */
    + before = "そーめんたいりく";
    + expResult = "いくそためりんー";
    + result = DefragUtil.defrag(before);
    + assertEquals(expResult, result);
    +
    + /* 漢字 */
    + before = "井阿折宇絵";
    + expResult = "阿井宇絵折";
    + result = DefragUtil.defrag(before);
    + assertEquals(expResult, result);
    + }
    +
    +}
    \ No newline at end of file
    Index: nbproject/project.properties
    ===================================================================
    --- nbproject/project.properties (リビジョン 2)
    +++ nbproject/project.properties (リビジョン 5)
    @@ -1,3 +1,6 @@
    +annotation.processing.enabled=true
    +annotation.processing.enabled.in.editor=false
    +annotation.processing.run.all.processors=true
    application.title=SomenTairiku
    application.vendor=yayugu
    auxiliary.org-netbeans-modules-projectimport-eclipse-core.key=src=src;file=C:/Users/yayugu/workspace/SomenTairiku/twitter4j-core-2.1.3-SNAPSHOT.jar;output=bin;
    @@ -36,12 +39,13 @@
    # Space-separated list of extra javac options
    javac.compilerargs=
    javac.deprecation=false
    +javac.processorpath=\
    + ${javac.classpath}
    javac.source=1.6
    javac.target=1.6
    javac.test.classpath=\
    ${javac.classpath}:\
    ${build.classes.dir}:\
    - ${libs.junit.classpath}:\
    ${libs.junit_4.classpath}
    javadoc.additionalparam=
    javadoc.author=false
    @@ -76,3 +80,4 @@
    ${build.test.classes.dir}
    source.encoding=UTF-8
    src.dir=${file.reference.SomenTairiku-src}
    +test.test.dir=test
    Index: nbproject/project.xml
    ===================================================================
    --- nbproject/project.xml (リビジョン 2)
    +++ nbproject/project.xml (リビジョン 5)
    @@ -7,7 +7,9 @@
    <source-roots>
    <root id="src.dir" name="src"/>
    </source-roots>
    - <test-roots/>
    + <test-roots>
    + <root id="test.test.dir"/>
    + </test-roots>
    </data>
    </configuration>
    </project>
    Index: nbproject/genfiles.properties
    ===================================================================
    --- nbproject/genfiles.properties (リビジョン 2)
    +++ nbproject/genfiles.properties (リビジョン 5)
    @@ -1,8 +1,8 @@
    -nb-build.xml.data.CRC32=32f9a5aa
    +nb-build.xml.data.CRC32=2db4335d
    nb-build.xml.script.CRC32=4b18230c
    nb-build.xml.stylesheet.CRC32=28e38971@1.38.2.45
    # This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
    # Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
    -nbproject/build-impl.xml.data.CRC32=32f9a5aa
    -nbproject/build-impl.xml.script.CRC32=f3ac4b69
    +nbproject/build-impl.xml.data.CRC32=2db4335d
    +nbproject/build-impl.xml.script.CRC32=932cf7fb
    nbproject/build-impl.xml.stylesheet.CRC32=f33e10ff@1.38.2.45
    Index: nbproject/build-impl.xml
    ===================================================================
    --- nbproject/build-impl.xml (リビジョン 2)
    +++ nbproject/build-impl.xml (リビジョン 5)
    @@ -120,7 +120,9 @@
    </and>
    </condition>
    <condition property="have.tests">
    - <or/>
    + <or>
    + <available file="${test.test.dir}"/>
    + </or>
    </condition>
    <condition property="have.sources">
    <or>
    @@ -181,6 +183,7 @@
    </target>
    <target depends="-pre-init,-init-private,-init-user,-init-project,-do-init" name="-init-check">
    <fail unless="src.dir">Must set src.dir</fail>
    + <fail unless="test.test.dir">Must set test.test.dir</fail>
    <fail unless="build.dir">Must set build.dir</fail>
    <fail unless="dist.dir">Must set dist.dir</fail>
    <fail unless="build.classes.dir">Must set build.classes.dir</fail>
    @@ -307,7 +310,11 @@
    <attribute default="**" name="testincludes"/>
    <sequential>
    <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" showoutput="true" tempdir="${build.dir}">
    - <batchtest todir="${build.test.results.dir}"/>
    + <batchtest todir="${build.test.results.dir}">
    + <fileset dir="${test.test.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
    + <filename name="@{testincludes}"/>
    + </fileset>
    + </batchtest>
    <classpath>
    <path path="${run.test.classpath}"/>
    </classpath>
    @@ -719,11 +726,13 @@
    <!-- You can override this target in the ../build.xml file. -->
    </target>
    <target if="do.depend.true" name="-compile-test-depend">
    - <j2seproject3:depend classpath="${javac.test.classpath}" destdir="${build.test.classes.dir}" srcdir=""/>
    + <j2seproject3:depend classpath="${javac.test.classpath}" destdir="${build.test.classes.dir}" srcdir="${test.test.dir}"/>
    </target>
    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test,-compile-test-depend" if="have.tests" name="-do-compile-test">
    - <j2seproject3:javac apgeneratedsrcdir="${build.test.classes.dir}" classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" processorpath="${javac.test.processorpath}" srcdir=""/>
    - <copy todir="${build.test.classes.dir}"/>
    + <j2seproject3:javac apgeneratedsrcdir="${build.test.classes.dir}" classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" processorpath="${javac.test.processorpath}" srcdir="${test.test.dir}"/>
    + <copy todir="${build.test.classes.dir}">
    + <fileset dir="${test.test.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
    + </copy>
    </target>
    <target name="-post-compile-test">
    <!-- Empty placeholder for easier customization. -->
    @@ -737,8 +746,10 @@
    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test-single" if="have.tests" name="-do-compile-test-single">
    <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail>
    <j2seproject3:force-recompile destdir="${build.test.classes.dir}"/>
    - <j2seproject3:javac apgeneratedsrcdir="${build.test.classes.dir}" classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" excludes="" includes="${javac.includes}" processorpath="${javac.test.processorpath}" sourcepath="" srcdir=""/>
    - <copy todir="${build.test.classes.dir}"/>
    + <j2seproject3:javac apgeneratedsrcdir="${build.test.classes.dir}" classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" excludes="" includes="${javac.includes}" processorpath="${javac.test.processorpath}" sourcepath="${test.test.dir}" srcdir="${test.test.dir}"/>
    + <copy todir="${build.test.classes.dir}">
    + <fileset dir="${test.test.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
    + </copy>
    </target>
    <target name="-post-compile-test-single">
    <!-- Empty placeholder for easier customization. -->
    Index: src/main/SettingDialog.form
    ===================================================================
    --- src/main/SettingDialog.form (リビジョン 0)
    +++ src/main/SettingDialog.form (リビジョン 5)
    @@ -0,0 +1,56 @@
    +<?xml version="1.1" encoding="UTF-8" ?>
    +
    +<Form version="1.5" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JDialogFormInfo">
    + <Properties>
    + <Property name="defaultCloseOperation" type="int" value="2"/>
    + <Property name="title" type="java.lang.String" value="&#x305d;&#x30fc;&#x3081;&#x3093;&#x5927;&#x9678; - &#x8a2d;&#x5b9a;"/>
    + </Properties>
    + <SyntheticProperties>
    + <SyntheticProperty name="formSizePolicy" type="int" value="1"/>
    + </SyntheticProperties>
    + <AuxValues>
    + <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
    + <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
    + <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
    + <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
    + <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
    + <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
    + <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
    + <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
    + <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
    + </AuxValues>
    +
    + <Layout>
    + <DimensionLayout dim="0">
    + <Group type="103" groupAlignment="0" attributes="0">
    + <Group type="102" alignment="0" attributes="0">
    + <EmptySpace max="-2" attributes="0"/>
    + <Component id="jToggleButton1" min="-2" max="-2" attributes="0"/>
    + <EmptySpace max="32767" attributes="0"/>
    + </Group>
    + </Group>
    + </DimensionLayout>
    + <DimensionLayout dim="1">
    + <Group type="103" groupAlignment="0" attributes="0">
    + <Group type="102" alignment="0" attributes="0">
    + <EmptySpace min="-2" pref="21" max="-2" attributes="0"/>
    + <Component id="jToggleButton1" min="-2" max="-2" attributes="0"/>
    + <EmptySpace pref="23" max="32767" attributes="0"/>
    + </Group>
    + </Group>
    + </DimensionLayout>
    + </Layout>
    + <SubComponents>
    + <Component class="javax.swing.JToggleButton" name="jToggleButton1">
    + <Properties>
    + <Property name="text" type="java.lang.String" value="enable/disable defrag(F4)"/>
    + </Properties>
    + <Events>
    + <EventHandler event="stateChanged" listener="javax.swing.event.ChangeListener" parameters="javax.swing.event.ChangeEvent" handler="settingDefrag"/>
    + </Events>
    + <AuxValues>
    + <AuxValue name="JavaCodeGenerator_allCodePost" type="java.lang.String" value="if (Setting.getInstance().configDefragEnabled) {&#xa; jToggleButton1.setSelected(true);&#xa;} else {&#xa; jToggleButton1.setSelected(false);&#xa;}"/>
    + </AuxValues>
    + </Component>
    + </SubComponents>
    +</Form>
    Index: src/main/SomenTairiku.java
    ===================================================================
    --- src/main/SomenTairiku.java (リビジョン 2)
    +++ src/main/SomenTairiku.java (リビジョン 5)
    @@ -4,6 +4,7 @@

    public class SomenTairiku {
    public static void main(String[] args) {
    + Setting.getInstance().load();
    java.awt.EventQueue.invokeLater(new Runnable() {
    public void run() {
    new MainWindow().setVisible(true);
    Index: src/main/MainWindow.java
    ===================================================================
    --- src/main/MainWindow.java (リビジョン 2)
    +++ src/main/MainWindow.java (リビジョン 5)
    @@ -7,6 +7,7 @@
    package main;
    import java.awt.event.KeyEvent;
    import javax.swing.ImageIcon;
    +import main.util.DefragUtil;

    /**
    *
    @@ -34,6 +35,7 @@

    textArea = new javax.swing.JTextArea();
    labelCount = new javax.swing.JLabel();
    + jButton1 = new javax.swing.JButton();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    setTitle("そーめん大陸");
    @@ -58,21 +60,31 @@
    }
    });

    + jButton1.setText("setting");
    + jButton1.addActionListener(new java.awt.event.ActionListener() {
    + public void actionPerformed(java.awt.event.ActionEvent evt) {
    + openSettingDialog(evt);
    + }
    + });
    +
    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
    - .addContainerGap()
    + .addComponent(jButton1)
    + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 152, Short.MAX_VALUE)
    .addComponent(labelCount))
    .addComponent(textArea, javax.swing.GroupLayout.DEFAULT_SIZE, 254, Short.MAX_VALUE)
    );
    layout.setVerticalGroup(
    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
    - .addComponent(textArea, javax.swing.GroupLayout.DEFAULT_SIZE, 75, Short.MAX_VALUE)
    + .addComponent(textArea, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
    - .addComponent(labelCount))
    + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
    + .addComponent(labelCount)
    + .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 13, javax.swing.GroupLayout.PREFERRED_SIZE)))
    );

    pack();
    @@ -104,6 +116,10 @@
    textArea.setText("");
    } else if(evt.getKeyCode() == KeyEvent.VK_CONTROL) {
    ctrlPressed = true;
    + } else if (evt.getKeyCode() == KeyEvent.VK_F4) {
    + if (Setting.getInstance().configDefragEnabled) {
    + textArea.setText(DefragUtil.defrag(textArea.getText()));
    + }
    }
    labelCount.setText(Integer.toString(140 - textArea.getText().length()));
    }//GEN-LAST:event_keyPressed
    @@ -114,8 +130,12 @@
    }
    }//GEN-LAST:event_keyReleased

    + private void openSettingDialog(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_openSettingDialog
    + new SettingDialog(this, true).setVisible(true);
    + }//GEN-LAST:event_openSettingDialog

    // Variables declaration - do not modify//GEN-BEGIN:variables
    + private javax.swing.JButton jButton1;
    private javax.swing.JLabel labelCount;
    private javax.swing.JTextArea textArea;
    // End of variables declaration//GEN-END:variables
    Index: src/main/Setting.java
    ===================================================================
    --- src/main/Setting.java (リビジョン 0)
    +++ src/main/Setting.java (リビジョン 5)
    @@ -0,0 +1,62 @@
    +/*
    + * To change this template, choose Tools | Templates
    + * and open the template in the editor.
    + */
    +package main;
    +
    +import java.io.FileInputStream;
    +import java.io.FileOutputStream;
    +import java.io.IOException;
    +import java.util.Properties;
    +
    +/**
    + * 設定を保持するクラスですよ
    + * @author hogehiga
    + */
    +public final class Setting {
    +
    + private String configFile = System.getProperty("user.home") + ".somentairiku";
    + private Properties props = new Properties();
    +
    + /**
    + * 設定をファイルに保存しますよ
    + */
    + public void save() {
    + props.setProperty("defragEnabled", Boolean.toString(configDefragEnabled));
    + try {
    + props.store(new FileOutputStream(configFile), null);
    + } catch (IOException e) {
    + e.printStackTrace();
    + return;
    + }
    + }
    +
    + /**
    + * 設定をファイルから読み込みますよ
    + */
    + public void load() {
    + try {
    + props.load(new FileInputStream(configFile));
    + } catch (IOException e) {
    + e.printStackTrace();
    + return;
    + }
    + if (props.containsKey("defragEnabled")) {
    + configDefragEnabled = Boolean.parseBoolean(props.getProperty("defragEnabled"));
    + } else {
    + configDefragEnabled = false;
    + }
    + }
    +
    + /**
    + * デフラグが有効かどうか
    + */
    + public boolean configDefragEnabled;
    +
    + /* Singleton */
    + private static final Setting instance = new Setting();
    + private Setting() {};
    + public static Setting getInstance() {
    + return Setting.instance;
    + }
    +}
    Index: src/main/SettingDialog.java
    ===================================================================
    --- src/main/SettingDialog.java (リビジョン 0)
    +++ src/main/SettingDialog.java (リビジョン 5)
    @@ -0,0 +1,90 @@
    +/*
    + * To change this template, choose Tools | Templates
    + * and open the template in the editor.
    + */
    +
    +/*
    + * SettingDialog.java
    + *
    + * Created on 2010/10/22, 1:25:59
    + */
    +
    +package main;
    +
    +/**
    + * 設定ダイアログ
    + * @author hogehiga
    + */
    +public class SettingDialog extends javax.swing.JDialog {
    +
    + /** Creates new form SettingDialog */
    + public SettingDialog(java.awt.Frame parent, boolean modal) {
    + super(parent, modal);
    + initComponents();
    + }
    +
    + /** This method is called from within the constructor to
    + * initialize the form.
    + * WARNING: Do NOT modify this code. The content of this method is
    + * always regenerated by the Form Editor.
    + */
    + @SuppressWarnings("unchecked")
    + // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    + private void initComponents() {
    +
    + jToggleButton1 = new javax.swing.JToggleButton();
    +
    + setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
    + setTitle("そーめん大陸 - 設定");
    +
    + jToggleButton1.setText("enable/disable defrag(F4)");
    + jToggleButton1.addChangeListener(new javax.swing.event.ChangeListener() {
    + public void stateChanged(javax.swing.event.ChangeEvent evt) {
    + settingDefrag(evt);
    + }
    + });
    +
    + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    + getContentPane().setLayout(layout);
    + layout.setHorizontalGroup(
    + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    + .addGroup(layout.createSequentialGroup()
    + .addContainerGap()
    + .addComponent(jToggleButton1)
    + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
    + );
    + layout.setVerticalGroup(
    + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    + .addGroup(layout.createSequentialGroup()
    + .addGap(21, 21, 21)
    + .addComponent(jToggleButton1)
    + .addContainerGap(23, Short.MAX_VALUE))
    + );
    +
    + if (Setting.getInstance().configDefragEnabled) {
    + jToggleButton1.setSelected(true);
    + } else {
    + jToggleButton1.setSelected(false);
    + }
    +
    + pack();
    + }// </editor-fold>//GEN-END:initComponents
    +
    + /**
    + * デフラグボタンが押されたら、設定を変更あんど保存するよ
    + * @param evt
    + */
    + private void settingDefrag(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_settingDefrag
    + if (jToggleButton1.isSelected()) {
    + Setting.getInstance().configDefragEnabled = true;
    + } else {
    + Setting.getInstance().configDefragEnabled = false;
    + }
    + Setting.getInstance().save();
    + }//GEN-LAST:event_settingDefrag
    +
    + // Variables declaration - do not modify//GEN-BEGIN:variables
    + private javax.swing.JToggleButton jToggleButton1;
    + // End of variables declaration//GEN-END:variables
    +
    +}
    Index: src/main/util/DefragUtil.java
    ===================================================================
    --- src/main/util/DefragUtil.java (リビジョン 0)
    +++ src/main/util/DefragUtil.java (リビジョン 5)
    @@ -0,0 +1,46 @@
    +/*
    + * To change this template, choose Tools | Templates
    + * and open the template in the editor.
    + */
    +package main.util;
    +
    +import java.text.Collator;
    +import java.util.ArrayList;
    +import java.util.Collections;
    +import java.util.List;
    +import java.util.Locale;
    +
    +/**
    + * デフラグ用ユーティリティクラスですね
    + * @author hogehiga
    + */
    +public final class DefragUtil {
    +
    + /**
    + * 文字列をデフラグして返します。
    + * 例)
    + * defrag("そーめんたいりく") => "いくそためりんー"
    + * @param before
    + * @return beforeをデフラグした文字列
    + */
    + public static String defrag(String before) {
    + if (before == null) {
    + return before;
    + }
    + // ソートのためにリストに変換
    + List<String> list = new ArrayList();
    + for (int i = 0; i < before.length(); i++) {
    + list.add(String.valueOf(before.charAt(i)));
    + }
    +
    + // ソートして文字列にして返す
    + Collections.sort(list, Collator.getInstance(Locale.JAPANESE));
    + StringBuilder sb = new StringBuilder();
    + for (String s : list) {
    + sb.append(s);
    + }
    + return sb.toString();
    + }
    +
    + private DefragUtil() {}
    +}
    Index: src/main/MainWindow.form
    ===================================================================
    --- src/main/MainWindow.form (リビジョン 2)
    +++ src/main/MainWindow.form (リビジョン 5)
    @@ -1,4 +1,4 @@
    -<?xml version="1.0" encoding="UTF-8" ?>
    +<?xml version="1.1" encoding="UTF-8" ?>

    <Form version="1.3" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JFrameFormInfo">
    <Properties>
    @@ -24,7 +24,8 @@
    <DimensionLayout dim="0">
    <Group type="103" groupAlignment="0" attributes="0">
    <Group type="102" alignment="1" attributes="0">
    - <EmptySpace max="-2" attributes="0"/>
    + <Component id="jButton1" min="-2" max="-2" attributes="0"/>
    + <EmptySpace pref="152" max="32767" attributes="0"/>
    <Component id="labelCount" min="-2" max="-2" attributes="0"/>
    </Group>
    <Component id="textArea" alignment="0" pref="254" max="32767" attributes="0"/>
    @@ -33,9 +34,12 @@
    <DimensionLayout dim="1">
    <Group type="103" groupAlignment="0" attributes="0">
    <Group type="102" alignment="1" attributes="0">
    - <Component id="textArea" pref="75" max="32767" attributes="0"/>
    + <Component id="textArea" max="32767" attributes="0"/>
    <EmptySpace max="-2" attributes="0"/>
    - <Component id="labelCount" min="-2" max="-2" attributes="0"/>
    + <Group type="103" groupAlignment="3" attributes="0">
    + <Component id="labelCount" alignment="3" min="-2" max="-2" attributes="0"/>
    + <Component id="jButton1" alignment="3" min="-2" pref="13" max="-2" attributes="0"/>
    + </Group>
    </Group>
    </Group>
    </DimensionLayout>
    @@ -63,5 +67,13 @@
    <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="labelCountClick"/>
    </Events>
    </Component>
    + <Component class="javax.swing.JButton" name="jButton1">
    + <Properties>
    + <Property name="text" type="java.lang.String" value="setting"/>
    + </Properties>
    + <Events>
    + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="openSettingDialog"/>
    + </Events>
    + </Component>
    </SubComponents>
    </Form>