OSDN Git Service

詳細表示ボタンを押したときに、発言したユーザのイメージと発言も消えてしまう問題を解決
[nt-manager/nt-manager.git] / src / twitter / gui / form / NishioTweetManager.java
index 0a5cc01..1e0dc4d 100644 (file)
@@ -21,6 +21,7 @@ import java.awt.event.ActionListener;
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
 import java.awt.image.BufferedImage;
+import java.io.IOException;
 import java.net.URL;
 import java.util.logging.Level;
 import java.util.logging.Logger;
@@ -34,112 +35,124 @@ import javax.swing.text.Style;
 import javax.swing.text.StyleConstants;
 import javax.swing.text.html.HTMLDocument;
 import javax.swing.text.html.StyleSheet;
+import twitter.action.list.ListGetterSelection;
 import twitter.gui.action.TweetMainAction;
 import twitter.gui.component.TweetHashtagHyperlinkHandler;
 import twitter.gui.component.TweetHyperlinkHandler;
+import twitter.gui.component.TweetTextFieldPopupMenu;
+import twitter.manage.ClientVersionManager;
 import twitter.manage.TweetManager;
+import twitter.manage.VersionInfo;
 import twitter.task.TimerID;
+import twitter4j.ConnectionLifeCycleListener;
 
 /**
  *
  * @author nishio
  */
-public class NishioTweetManager extends javax.swing.JFrame {
-
-    private SystemTray systemTray;
-    private TrayIcon trayIcon;
-    private TweetHashtagHyperlinkHandler hashTagHyperlinkListener = new TweetHashtagHyperlinkHandler();
-
-    /** Creates new form NishioTweetManager */
-    public NishioTweetManager() {
-        initComponents();
-        //component初期化
-        initComponents2();
-        //twitterコード初期化
-        init();
-        //checkboxの更新
-        updateSelectedInformation();
-    }
-
-    /**
-     * コンポーネント初期化
-     */
-    private void initComponents2() {
-        Image image = null;
-        try {
-            //トレイイメージ
-            /*URL resource = getClass().getResource("icon.png");
-            image = new ImageIcon(resource).getImage();*/
-            image = new ImageIcon("resources/icon.png").getImage();
-            //フレームのアイコン設定
-            this.setIconImage(image);
-        } catch (Exception e) {
-            e.printStackTrace();
-            image = new BufferedImage(32, 32, BufferedImage.TYPE_INT_RGB);
-        }
-        //システムトライ関係
-        systemTray = SystemTray.getSystemTray();
-        final JFrame frame = this;
-        final PopupMenu popup = new PopupMenu();
-        trayIcon = new TrayIcon(image, "Nishio Tweet Manager", popup);
-
-        //左クリックした時に「画面を開く」アクションをする
-        trayIcon.addMouseListener(new MouseAdapter() {
-
-            @Override
-            public void mousePressed(MouseEvent me) {
-                //左クリック
-                if (me.getButton() == MouseEvent.BUTTON1) {
-                    frame.setVisible(true);
-                }
-            }
-        });
-
-        //右クリック時のポップアップメニュー
-        MenuItem item1 = new MenuItem("画面を開く");
-        item1.addActionListener(new ActionListener() {
-
-            @Override
-            public void actionPerformed(ActionEvent e) {
-                frame.setVisible(true);
-            }
-        });
-        MenuItem item2 = new MenuItem("終了");
-        item2.addActionListener(new ActionListener() {
-
-            @Override
-            public void actionPerformed(ActionEvent e) {
-                systemTray.remove(trayIcon);
-                frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
-                frame.dispose();
-                System.exit(0);
-            }
-        });
-        popup.add(item1);
-        popup.add(item2);
-
-        try {
-            systemTray.add(trayIcon);
-        } catch (AWTException e) {
-            e.printStackTrace();
-        }
-    }
-
-
-    /** 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")
+public class NishioTweetManager extends javax.swing.JFrame implements ConnectionLifeCycleListener{
+
+       private SystemTray systemTray;
+       private TrayIcon trayIcon;
+       private TweetHashtagHyperlinkHandler hashTagHyperlinkListener = new TweetHashtagHyperlinkHandler();
+
+       /** Creates new form NishioTweetManager */
+       public NishioTweetManager() {
+               initComponents();
+               // component初期化
+               initComponents2();
+               // twitterコード初期化
+               init();
+               // checkboxの更新
+               updateSelectedInformation();
+       }
+
+       /**
+        * コンポーネント初期化
+        */
+       private void initComponents2() {
+               Image image = null;
+               try {
+                       // トレイイメージ
+                       /*
+                        * URL resource = getClass().getResource("icon.png"); image = new
+                        * ImageIcon(resource).getImage();
+                        */
+                       image = new ImageIcon("resources/icon.png").getImage();
+                       // フレームのアイコン設定
+                       this.setIconImage(image);
+               } catch (Exception e) {
+                       e.printStackTrace();
+                       image = new BufferedImage(32, 32, BufferedImage.TYPE_INT_RGB);
+               }
+               // システムトライ関係
+               systemTray = SystemTray.getSystemTray();
+               final JFrame frame = this;
+               final PopupMenu popup = new PopupMenu();
+               trayIcon = new TrayIcon(image, "Nishio Tweet Manager", popup);
+
+               // 左クリックした時に「画面を開く」アクションをする
+               trayIcon.addMouseListener(new MouseAdapter() {
+
+                       @Override
+                       public void mousePressed(MouseEvent me) {
+                               // 左クリック
+                               if (me.getButton() == MouseEvent.BUTTON1) {
+                                       frame.setVisible(true);
+                               }
+                       }
+               });
+
+               // 右クリック時のポップアップメニュー
+               MenuItem item1 = new MenuItem("画面を開く");
+               item1.addActionListener(new ActionListener() {
+
+                       @Override
+                       public void actionPerformed(ActionEvent e) {
+                               frame.setVisible(true);
+                       }
+               });
+               MenuItem item2 = new MenuItem("終了");
+               item2.addActionListener(new ActionListener() {
+
+                       @Override
+                       public void actionPerformed(ActionEvent e) {
+                               systemTray.remove(trayIcon);
+                               frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
+                               frame.dispose();
+                               System.exit(0);
+                       }
+               });
+               popup.add(item1);
+               popup.add(item2);
+
+               try {
+                       systemTray.add(trayIcon);
+               } catch (AWTException e) {
+                       e.printStackTrace();
+               }
+
+               //tweet発言するボックスの右クリック対応
+               this.jTextPane.setComponentPopupMenu(
+                               new TweetTextFieldPopupMenu( this.jTextPane, false ) );
+               this.tweetMessageBox.setComponentPopupMenu(
+                               new TweetTextFieldPopupMenu( this.tweetMessageBox, true) );
+               this.userIntroBox.setComponentPopupMenu(
+                               new TweetTextFieldPopupMenu(this.userIntroBox, true));
+       }
+
+       /**
+        * 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"
     // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
     private void initComponents() {
 
         jTabbedPane1 = new twitter.gui.component.DnDTabbedPane();
         jPanel1 = new javax.swing.JPanel();
-        userImageLabel = new javax.swing.JLabel();
-        jScrollPane5 = new javax.swing.JScrollPane();
-        tweetMessageBox = new javax.swing.JEditorPane();
         jLabel3 = new javax.swing.JLabel();
         jLabel4 = new javax.swing.JLabel();
         jLabel5 = new javax.swing.JLabel();
@@ -160,6 +173,7 @@ public class NishioTweetManager extends javax.swing.JFrame {
         clientNameLabel = new javax.swing.JEditorPane();
         jPanel2 = new javax.swing.JPanel();
         statusBar = new javax.swing.JLabel();
+        streamingLabel = new javax.swing.JLabel();
         jToolBar1 = new javax.swing.JToolBar();
         jButton1 = new javax.swing.JButton();
         jSeparator1 = new javax.swing.JToolBar.Separator();
@@ -178,6 +192,10 @@ public class NishioTweetManager extends javax.swing.JFrame {
         jButton4 = new javax.swing.JButton();
         tweetLengthLabel = new javax.swing.JLabel();
         jLabel15 = new javax.swing.JLabel();
+        jPanel4 = new javax.swing.JPanel();
+        userImageLabel = new javax.swing.JLabel();
+        jScrollPane5 = new javax.swing.JScrollPane();
+        tweetMessageBox = new javax.swing.JEditorPane();
         jMenuBar1 = new javax.swing.JMenuBar();
         jMenu1 = new javax.swing.JMenu();
         jMenuItem1 = new javax.swing.JMenuItem();
@@ -196,10 +214,14 @@ public class NishioTweetManager extends javax.swing.JFrame {
         jMenuItem17 = new javax.swing.JMenuItem();
         jMenuItem18 = new javax.swing.JMenuItem();
         jMenuItem21 = new javax.swing.JMenuItem();
+        jMenuItem35 = new javax.swing.JMenuItem();
+        jMenuItem36 = new javax.swing.JMenuItem();
         jSeparator6 = new javax.swing.JPopupMenu.Separator();
+        jMenuItem30 = new javax.swing.JMenuItem();
+        jMenuItem22 = new javax.swing.JMenuItem();
         jMenuItem19 = new javax.swing.JMenuItem();
         jMenuItem20 = new javax.swing.JMenuItem();
-        jMenuItem22 = new javax.swing.JMenuItem();
+        jMenuItem33 = new javax.swing.JMenuItem();
         jMenu4 = new javax.swing.JMenu();
         jMenuItem5 = new javax.swing.JMenuItem();
         jCheckBoxMenuItem1 = new javax.swing.JCheckBoxMenuItem();
@@ -212,9 +234,24 @@ public class NishioTweetManager extends javax.swing.JFrame {
         jMenu5 = new javax.swing.JMenu();
         jMenuItem6 = new javax.swing.JMenuItem();
         jMenuItem23 = new javax.swing.JMenuItem();
+        jMenuItem31 = new javax.swing.JMenuItem();
+        jMenuItem34 = new javax.swing.JMenuItem();
+        jMenu7 = new javax.swing.JMenu();
+        jMenuItem25 = new javax.swing.JMenuItem();
+        jMenuItem24 = new javax.swing.JMenuItem();
+        jMenuItem26 = new javax.swing.JMenuItem();
+        jSeparator7 = new javax.swing.JPopupMenu.Separator();
+        jMenuItem27 = new javax.swing.JMenuItem();
+        jMenuItem28 = new javax.swing.JMenuItem();
+        jMenuItem29 = new javax.swing.JMenuItem();
         jMenu2 = new javax.swing.JMenu();
         jMenuItem2 = new javax.swing.JMenuItem();
         jMenuItem4 = new javax.swing.JMenuItem();
+        jMenu8 = new javax.swing.JMenu();
+        logSaveCheckItem = new javax.swing.JCheckBoxMenuItem();
+        jMenuItem32 = new javax.swing.JMenuItem();
+        jMenu9 = new javax.swing.JMenu();
+        isUsingStreamingMenuItem = new javax.swing.JCheckBoxMenuItem();
         jMenu3 = new javax.swing.JMenu();
         jMenuItem3 = new javax.swing.JMenuItem();
 
@@ -229,21 +266,6 @@ public class NishioTweetManager extends javax.swing.JFrame {
 
         jPanel1.setBorder(javax.swing.BorderFactory.createEtchedBorder());
 
-        userImageLabel.setBackground(java.awt.Color.black);
-        userImageLabel.setOpaque(true);
-
-        jScrollPane5.setHorizontalScrollBar(null);
-
-        tweetMessageBox.setContentType("text/html");
-        tweetMessageBox.setEditable(false);
-        tweetMessageBox.addComponentListener(new java.awt.event.ComponentAdapter() {
-            public void componentResized(java.awt.event.ComponentEvent evt) {
-                tweetMessageBoxComponentResized(evt);
-            }
-        });
-        tweetMessageBox.addHyperlinkListener(hashTagHyperlinkListener);
-        jScrollPane5.setViewportView(tweetMessageBox);
-
         jLabel3.setText("ユーザ名");
 
         jLabel4.setText("更新日");
@@ -330,17 +352,17 @@ public class NishioTweetManager extends javax.swing.JFrame {
         jPanel1Layout.setHorizontalGroup(
             jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
             .addGroup(jPanel1Layout.createSequentialGroup()
-                .addComponent(userImageLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 48, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addGap(3, 3, 3)
-                .addComponent(jScrollPane5, javax.swing.GroupLayout.DEFAULT_SIZE, 656, Short.MAX_VALUE))
-            .addGroup(jPanel1Layout.createSequentialGroup()
-                .addContainerGap()
                 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                     .addGroup(jPanel1Layout.createSequentialGroup()
+                        .addComponent(jScrollPane7, javax.swing.GroupLayout.PREFERRED_SIZE, 220, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(jScrollPane8, javax.swing.GroupLayout.PREFERRED_SIZE, 189, javax.swing.GroupLayout.PREFERRED_SIZE))
+                    .addGroup(jPanel1Layout.createSequentialGroup()
+                        .addContainerGap()
                         .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                             .addComponent(jLabel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                             .addComponent(jLabel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-                            .addComponent(jLabel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+                            .addComponent(jLabel3))
                         .addGap(18, 18, 18)
                         .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                             .addComponent(locationLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 183, javax.swing.GroupLayout.PREFERRED_SIZE)
@@ -355,23 +377,17 @@ public class NishioTweetManager extends javax.swing.JFrame {
                         .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                             .addComponent(updateLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                             .addComponent(followerLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 68, Short.MAX_VALUE)
-                            .addComponent(followingLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
-                    .addGroup(jPanel1Layout.createSequentialGroup()
-                        .addComponent(jScrollPane7, javax.swing.GroupLayout.PREFERRED_SIZE, 220, javax.swing.GroupLayout.PREFERRED_SIZE)
-                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                        .addComponent(jScrollPane8, javax.swing.GroupLayout.PREFERRED_SIZE, 189, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                            .addComponent(followingLabel))))
                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addComponent(jScrollPane6, javax.swing.GroupLayout.DEFAULT_SIZE, 274, Short.MAX_VALUE))
+                .addComponent(jScrollPane6, javax.swing.GroupLayout.DEFAULT_SIZE, 293, Short.MAX_VALUE))
         );
         jPanel1Layout.setVerticalGroup(
             jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
             .addGroup(jPanel1Layout.createSequentialGroup()
-                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                    .addComponent(userImageLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 48, javax.swing.GroupLayout.PREFERRED_SIZE)
-                    .addComponent(jScrollPane5, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE))
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                    .addGroup(jPanel1Layout.createSequentialGroup()
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
+                    .addComponent(jScrollPane6)
+                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel1Layout.createSequentialGroup()
+                        .addContainerGap()
                         .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                             .addGroup(jPanel1Layout.createSequentialGroup()
                                 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
@@ -397,33 +413,41 @@ public class NishioTweetManager extends javax.swing.JFrame {
                                 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                     .addComponent(jLabel13)
                                     .addComponent(updateLabel))))
-                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addGap(9, 9, 9)
                         .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                             .addComponent(jScrollPane8, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
-                            .addComponent(jScrollPane7, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)))
-                    .addComponent(jScrollPane6, javax.swing.GroupLayout.PREFERRED_SIZE, 85, javax.swing.GroupLayout.PREFERRED_SIZE))
-                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+                            .addComponent(jScrollPane7, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE))))
+                .addContainerGap(2, Short.MAX_VALUE))
         );
 
         jPanel2.setBorder(javax.swing.BorderFactory.createEtchedBorder());
 
         statusBar.setText("Status");
-        statusBar.setBorder(null);
         statusBar.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
             public void propertyChange(java.beans.PropertyChangeEvent evt) {
                 statusBarPropertyChange(evt);
             }
         });
 
+        streamingLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
+        streamingLabel.setText("StreamingAPI停止中");
+        streamingLabel.setBorder(javax.swing.BorderFactory.createEtchedBorder());
+        streamingLabel.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
+
         javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
         jPanel2.setLayout(jPanel2Layout);
         jPanel2Layout.setHorizontalGroup(
             jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addComponent(statusBar, javax.swing.GroupLayout.PREFERRED_SIZE, 707, javax.swing.GroupLayout.PREFERRED_SIZE)
+            .addGroup(jPanel2Layout.createSequentialGroup()
+                .addComponent(statusBar, javax.swing.GroupLayout.DEFAULT_SIZE, 553, Short.MAX_VALUE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(streamingLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 156, javax.swing.GroupLayout.PREFERRED_SIZE))
         );
         jPanel2Layout.setVerticalGroup(
             jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addComponent(statusBar, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 20, Short.MAX_VALUE)
+            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                .addComponent(statusBar, javax.swing.GroupLayout.DEFAULT_SIZE, 20, Short.MAX_VALUE)
+                .addComponent(streamingLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 20, Short.MAX_VALUE))
         );
 
         jToolBar1.setRollover(true);
@@ -564,7 +588,7 @@ public class NishioTweetManager extends javax.swing.JFrame {
         jPanel3Layout.setHorizontalGroup(
             jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
             .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup()
-                .addComponent(jScrollPane9, javax.swing.GroupLayout.DEFAULT_SIZE, 498, Short.MAX_VALUE)
+                .addComponent(jScrollPane9, javax.swing.GroupLayout.DEFAULT_SIZE, 528, Short.MAX_VALUE)
                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                 .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                     .addComponent(jLabel15)
@@ -577,17 +601,47 @@ public class NishioTweetManager extends javax.swing.JFrame {
             jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
             .addGroup(jPanel3Layout.createSequentialGroup()
                 .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
-                    .addComponent(jButton4, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 34, Short.MAX_VALUE)
+                    .addComponent(jButton4, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 32, Short.MAX_VALUE)
                     .addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel3Layout.createSequentialGroup()
                         .addComponent(jLabel15)
                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                         .addComponent(tweetLengthLabel)))
-                .addGap(48, 48, 48))
+                .addGap(38, 38, 38))
             .addGroup(jPanel3Layout.createSequentialGroup()
-                .addComponent(jScrollPane9, javax.swing.GroupLayout.PREFERRED_SIZE, 53, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addComponent(jScrollPane9, javax.swing.GroupLayout.PREFERRED_SIZE, 48, javax.swing.GroupLayout.PREFERRED_SIZE)
                 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
         );
 
+        userImageLabel.setBackground(java.awt.Color.black);
+        userImageLabel.setOpaque(true);
+
+        jScrollPane5.setHorizontalScrollBar(null);
+
+        tweetMessageBox.setContentType("text/html");
+        tweetMessageBox.setEditable(false);
+        tweetMessageBox.addComponentListener(new java.awt.event.ComponentAdapter() {
+            public void componentResized(java.awt.event.ComponentEvent evt) {
+                tweetMessageBoxComponentResized(evt);
+            }
+        });
+        tweetMessageBox.addHyperlinkListener(hashTagHyperlinkListener);
+        jScrollPane5.setViewportView(tweetMessageBox);
+
+        javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4);
+        jPanel4.setLayout(jPanel4Layout);
+        jPanel4Layout.setHorizontalGroup(
+            jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(jPanel4Layout.createSequentialGroup()
+                .addComponent(userImageLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 48, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(jScrollPane5, javax.swing.GroupLayout.DEFAULT_SIZE, 667, Short.MAX_VALUE))
+        );
+        jPanel4Layout.setVerticalGroup(
+            jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addComponent(jScrollPane5, javax.swing.GroupLayout.DEFAULT_SIZE, 58, Short.MAX_VALUE)
+            .addComponent(userImageLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 48, javax.swing.GroupLayout.PREFERRED_SIZE)
+        );
+
         jMenu1.setMnemonic('F');
         /*
         org.openide.awt.Mnemonics.setLocalizedText(jMenu1, "ファイル(F)");
@@ -710,7 +764,7 @@ public class NishioTweetManager extends javax.swing.JFrame {
 
         jMenuItem18.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_S, java.awt.event.InputEvent.CTRL_MASK));
         jMenuItem18.setMnemonic('S');
-        jMenuItem18.setText("選択したの発言を別タブで開く(S)");
+        jMenuItem18.setText("選択したユーザの発言を別タブで開く(S)");
         jMenuItem18.addActionListener(new java.awt.event.ActionListener() {
             public void actionPerformed(java.awt.event.ActionEvent evt) {
                 jMenuItem18ActionPerformed(evt);
@@ -720,15 +774,49 @@ public class NishioTweetManager extends javax.swing.JFrame {
 
         jMenuItem21.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_B, java.awt.event.InputEvent.CTRL_MASK));
         jMenuItem21.setMnemonic('B');
-        jMenuItem21.setText("選択したの発言をブラウザで開く(B)");
+        jMenuItem21.setText("選択したユーザの発言をブラウザで開く(B)");
         jMenuItem21.addActionListener(new java.awt.event.ActionListener() {
             public void actionPerformed(java.awt.event.ActionEvent evt) {
                 jMenuItem21ActionPerformed(evt);
             }
         });
         jMenu6.add(jMenuItem21);
+
+        jMenuItem35.setText("選択したユーザがフォローしているユーザ一覧を開く");
+        jMenuItem35.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                jMenuItem35ActionPerformed(evt);
+            }
+        });
+        jMenu6.add(jMenuItem35);
+
+        jMenuItem36.setText("選択したユーザがフォローされているユーザ一覧を開く");
+        jMenuItem36.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                jMenuItem36ActionPerformed(evt);
+            }
+        });
+        jMenu6.add(jMenuItem36);
         jMenu6.add(jSeparator6);
 
+        jMenuItem30.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_O, java.awt.event.InputEvent.SHIFT_MASK | java.awt.event.InputEvent.CTRL_MASK));
+        jMenuItem30.setText("自分のお気に入りを開く");
+        jMenuItem30.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                jMenuItem30ActionPerformed(evt);
+            }
+        });
+        jMenu6.add(jMenuItem30);
+
+        jMenuItem22.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_O, java.awt.event.InputEvent.ALT_MASK));
+        jMenuItem22.setText("選択したユーザのお気に入りを開く");
+        jMenuItem22.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                jMenuItem22ActionPerformed(evt);
+            }
+        });
+        jMenu6.add(jMenuItem22);
+
         jMenuItem19.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_O, java.awt.event.InputEvent.CTRL_MASK));
         jMenuItem19.setMnemonic('F');
         jMenuItem19.setText("選択した発言をお気に入りに追加(F)");
@@ -739,7 +827,6 @@ public class NishioTweetManager extends javax.swing.JFrame {
         });
         jMenu6.add(jMenuItem19);
 
-        jMenuItem20.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_O, java.awt.event.InputEvent.SHIFT_MASK | java.awt.event.InputEvent.CTRL_MASK));
         jMenuItem20.setText("選択した発言をお気に入りから削除");
         jMenuItem20.addActionListener(new java.awt.event.ActionListener() {
             public void actionPerformed(java.awt.event.ActionEvent evt) {
@@ -748,14 +835,15 @@ public class NishioTweetManager extends javax.swing.JFrame {
         });
         jMenu6.add(jMenuItem20);
 
-        jMenuItem22.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_O, java.awt.event.InputEvent.ALT_MASK));
-        jMenuItem22.setText("選択したユーザのお気に入りを開く");
-        jMenuItem22.addActionListener(new java.awt.event.ActionListener() {
+        jMenuItem33.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_C, java.awt.event.InputEvent.SHIFT_MASK | java.awt.event.InputEvent.CTRL_MASK));
+        jMenuItem33.setMnemonic('C');
+        jMenuItem33.setText("つぶやき内のURLをbit.ly短縮URLに変換(C)");
+        jMenuItem33.addActionListener(new java.awt.event.ActionListener() {
             public void actionPerformed(java.awt.event.ActionEvent evt) {
-                jMenuItem22ActionPerformed(evt);
+                jMenuItem33ActionPerformed(evt);
             }
         });
-        jMenu6.add(jMenuItem22);
+        jMenu6.add(jMenuItem33);
 
         jMenuBar1.add(jMenu6);
 
@@ -862,8 +950,85 @@ public class NishioTweetManager extends javax.swing.JFrame {
         });
         jMenu5.add(jMenuItem23);
 
+        jMenuItem31.setMnemonic('U');
+        jMenuItem31.setText("指定したユーザを検索(U)");
+        jMenuItem31.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                jMenuItem31ActionPerformed(evt);
+            }
+        });
+        jMenu5.add(jMenuItem31);
+
+        jMenuItem34.setText("指定したユーザのFollowing/Followerを表示");
+        jMenuItem34.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                jMenuItem34ActionPerformed(evt);
+            }
+        });
+        jMenu5.add(jMenuItem34);
+
         jMenuBar1.add(jMenu5);
 
+        jMenu7.setMnemonic('L');
+        jMenu7.setText("リスト(L)");
+
+        jMenuItem25.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_L, java.awt.event.InputEvent.CTRL_MASK));
+        jMenuItem25.setMnemonic('C');
+        jMenuItem25.setText("自分が作成したリスト一覧(C)");
+        jMenuItem25.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                jMenuItem25ActionPerformed(evt);
+            }
+        });
+        jMenu7.add(jMenuItem25);
+
+        jMenuItem24.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_L, java.awt.event.InputEvent.ALT_MASK));
+        jMenuItem24.setMnemonic('S');
+        jMenuItem24.setText("購読しているリスト一覧(S)");
+        jMenuItem24.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                jMenuItem24ActionPerformed(evt);
+            }
+        });
+        jMenu7.add(jMenuItem24);
+
+        jMenuItem26.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_L, java.awt.event.InputEvent.SHIFT_MASK | java.awt.event.InputEvent.CTRL_MASK));
+        jMenuItem26.setMnemonic('F');
+        jMenuItem26.setText("自分がフォローされているリスト一覧(F)");
+        jMenuItem26.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                jMenuItem26ActionPerformed(evt);
+            }
+        });
+        jMenu7.add(jMenuItem26);
+        jMenu7.add(jSeparator7);
+
+        jMenuItem27.setText("選択したユーザが作成したリスト一覧");
+        jMenuItem27.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                jMenuItem27ActionPerformed(evt);
+            }
+        });
+        jMenu7.add(jMenuItem27);
+
+        jMenuItem28.setText("選択したユーザが購読しているリスト一覧");
+        jMenuItem28.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                jMenuItem28ActionPerformed(evt);
+            }
+        });
+        jMenu7.add(jMenuItem28);
+
+        jMenuItem29.setText("選択したユーザがフォローされているリスト一覧");
+        jMenuItem29.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                jMenuItem29ActionPerformed(evt);
+            }
+        });
+        jMenu7.add(jMenuItem29);
+
+        jMenuBar1.add(jMenu7);
+
         jMenu2.setMnemonic('O');
         jMenu2.setText("設定(O)");
 
@@ -885,6 +1050,41 @@ public class NishioTweetManager extends javax.swing.JFrame {
 
         jMenuBar1.add(jMenu2);
 
+        jMenu8.setMnemonic('M');
+        jMenu8.setText("ログ管理(M)");
+
+        logSaveCheckItem.setSelected(true);
+        logSaveCheckItem.setText("タイムラインをログとして保存する");
+        logSaveCheckItem.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                logSaveCheckItemActionPerformed(evt);
+            }
+        });
+        jMenu8.add(logSaveCheckItem);
+
+        jMenuItem32.setText("ログをCSV形式として保存");
+        jMenuItem32.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                jMenuItem32ActionPerformed(evt);
+            }
+        });
+        jMenu8.add(jMenuItem32);
+
+        jMenuBar1.add(jMenu8);
+
+        jMenu9.setText("ストリーミング");
+
+        isUsingStreamingMenuItem.setSelected(true);
+        isUsingStreamingMenuItem.setText("ストリーミングAPIを利用する");
+        isUsingStreamingMenuItem.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                isUsingStreamingMenuItemActionPerformed(evt);
+            }
+        });
+        jMenu9.add(isUsingStreamingMenuItem);
+
+        jMenuBar1.add(jMenu9);
+
         jMenu3.setMnemonic('H');
         jMenu3.setText("ヘルプ(H)");
 
@@ -905,360 +1105,522 @@ public class NishioTweetManager extends javax.swing.JFrame {
         getContentPane().setLayout(layout);
         layout.setHorizontalGroup(
             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-            .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-            .addComponent(jToolBar1, javax.swing.GroupLayout.DEFAULT_SIZE, 711, Short.MAX_VALUE)
             .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-            .addComponent(jTabbedPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 711, Short.MAX_VALUE)
+            .addComponent(jPanel4, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+            .addComponent(jTabbedPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 720, Short.MAX_VALUE)
+            .addComponent(jToolBar1, javax.swing.GroupLayout.DEFAULT_SIZE, 720, Short.MAX_VALUE)
+            .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+            .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
         );
         layout.setVerticalGroup(
             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
             .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
-                .addComponent(jTabbedPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 321, Short.MAX_VALUE)
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addComponent(jTabbedPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 434, Short.MAX_VALUE)
+                .addGap(1, 1, 1)
+                .addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addGap(2, 2, 2)
+                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 101, javax.swing.GroupLayout.PREFERRED_SIZE)
                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                 .addComponent(jToolBar1, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, 58, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGap(1, 1, 1)
+                .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, 53, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addGap(1, 1, 1)
                 .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
         );
 
         pack();
     }// </editor-fold>//GEN-END:initComponents
 
-    private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton4ActionPerformed
-        // メッセージをつぶやく
-        mainAction.actionTweet();
-        updateLen();
-    }//GEN-LAST:event_jButton4ActionPerformed
-
-    private void tweetMessageBoxComponentResized(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_tweetMessageBoxComponentResized
-    }//GEN-LAST:event_tweetMessageBoxComponentResized
-
-    private void jTextPaneKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jTextPaneKeyReleased
-        // 残りつぶやける文字数情報を更新
-        mainAction.actionUpdateTweetMessageCount();
-    }//GEN-LAST:event_jTextPaneKeyReleased
-
-    private void jTextPaneFocusGained(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextPaneFocusGained
-        updateLen();
-    }//GEN-LAST:event_jTextPaneFocusGained
-
-    private void jTextPaneFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextPaneFocusLost
-        updateLen();
-    }//GEN-LAST:event_jTextPaneFocusLost
-
-    private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem1ActionPerformed
-        // 終了動作
-        mainAction.actionExitButton(evt);
-    }//GEN-LAST:event_jMenuItem1ActionPerformed
-
-    private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem2ActionPerformed
-        // 基本設定ダイアログを開く
-        mainAction.actionBasicSettingDialog();
-    }//GEN-LAST:event_jMenuItem2ActionPerformed
-
-    private void jMenuItem3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem3ActionPerformed
-        mainAction.actionShowAboutDialog();
-    }//GEN-LAST:event_jMenuItem3ActionPerformed
-
-    private void jMenuItem4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem4ActionPerformed
-        mainAction.actionShowAccountDialog();
-    }//GEN-LAST:event_jMenuItem4ActionPerformed
-
-    private void jMenuItem5ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem5ActionPerformed
-        //選択しているタブを削除
-        mainAction.actionRemoveFocusedTabbedTable();
-    }//GEN-LAST:event_jMenuItem5ActionPerformed
-
-    private void jMenuItem6ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem6ActionPerformed
-        this.mainAction.actionShowKeywordSearchDialog();
-    }//GEN-LAST:event_jMenuItem6ActionPerformed
-
-    private void jMenuItem7ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem7ActionPerformed
-        mainAction.actionUpdateButton(evt);
-        // いますぐ更新ボタンを押したので,更新タイムを一度リセットする
-       // mainAction.resetTweetAutoUpdate();
-    }//GEN-LAST:event_jMenuItem7ActionPerformed
-
-    private void jMenuItem8ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem8ActionPerformed
-        // tweet取得時間情報を更新
-        mainAction.actionRefreshTime();
-    }//GEN-LAST:event_jMenuItem8ActionPerformed
-
-    private void jMenuItem9ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem9ActionPerformed
-        mainAction.actionShowUserListDialog("yumi_rua");
-    }//GEN-LAST:event_jMenuItem9ActionPerformed
-
-    private void jTextPaneCaretUpdate(javax.swing.event.CaretEvent evt) {//GEN-FIRST:event_jTextPaneCaretUpdate
-        // TODO add your handling code here:
-    }//GEN-LAST:event_jTextPaneCaretUpdate
-
-    private void statusBarPropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_statusBarPropertyChange
-        
-    }//GEN-LAST:event_statusBarPropertyChange
-
-    private void jMenuItem10ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem10ActionPerformed
-        //フォーカスのあるタブだけ更新
-        mainAction.actionFocusedTableUpdate();
-    }//GEN-LAST:event_jMenuItem10ActionPerformed
-
-    private void jCheckBoxMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCheckBoxMenuItem1ActionPerformed
-        // 詳細情報ボタンを押した時の動作
-        mainAction.actionDetailInfoButton(evt);
-        jCheckBoxMenuItem1.setSelected( mainAction.isDetailInfoPanelVisible() );
-        jToggleButton1.setSelected( mainAction.isDetailInfoPanelVisible() );
-    }//GEN-LAST:event_jCheckBoxMenuItem1ActionPerformed
-
-    private void jCheckBoxMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCheckBoxMenuItem2ActionPerformed
-        //書き込みボタン表示
-        mainAction.actionShowTweetboxButton(evt);
-        this.invalidate();
-        this.validate();
-
-        jCheckBoxMenuItem2.setSelected( mainAction.isShowTweetBoxVisible() );
-        jToggleButton2.setSelected( mainAction.isShowTweetBoxVisible() );
-    }//GEN-LAST:event_jCheckBoxMenuItem2ActionPerformed
-
-    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
-        jMenuItem10ActionPerformed(evt);
-    }//GEN-LAST:event_jButton1ActionPerformed
-
-    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed
-        jMenuItem6ActionPerformed(evt);
-    }//GEN-LAST:event_jButton2ActionPerformed
-
-    private void jToggleButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jToggleButton1ActionPerformed
-        jCheckBoxMenuItem1ActionPerformed(evt);
-    }//GEN-LAST:event_jToggleButton1ActionPerformed
-
-    private void jToggleButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jToggleButton2ActionPerformed
-        jCheckBoxMenuItem2ActionPerformed(evt);
-    }//GEN-LAST:event_jToggleButton2ActionPerformed
-
-    private void jCheckBoxMenuItem3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCheckBoxMenuItem3ActionPerformed
-        if( mainAction.isExistTimelineTab() ) {
-            //タイムラインタブを削除
-            mainAction.actionRemoveTabbedTable( TimerID.createTimelineID() );
-            jCheckBoxMenuItem3.setSelected(false);
-            jToggleButton3.setSelected(false);
-        }else {
-            //タイムラインタブを追加
-            mainAction.actionAddTimelineTab( mainAction.getGetTimelinePeriod() );
-            jCheckBoxMenuItem3.setSelected(true);
-            jToggleButton3.setSelected(true);
-        }
-    }//GEN-LAST:event_jCheckBoxMenuItem3ActionPerformed
-
-    private void jToggleButton3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jToggleButton3ActionPerformed
-        jCheckBoxMenuItem3ActionPerformed(evt);
-    }//GEN-LAST:event_jToggleButton3ActionPerformed
-
-    private void jTabbedPane1ComponentRemoved(java.awt.event.ContainerEvent evt) {//GEN-FIRST:event_jTabbedPane1ComponentRemoved
-        
-    }//GEN-LAST:event_jTabbedPane1ComponentRemoved
-
-    private void jCheckBoxMenuItem4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCheckBoxMenuItem4ActionPerformed
-        if( mainAction.isExistMentionTab() ) {
-            //mentionタブを削除
-            mainAction.actionRemoveTabbedTable( TimerID.createMentionID() );
-            jCheckBoxMenuItem4.setSelected(false);
-            jToggleButton4.setSelected(false);
-        }else {
-            //mentionタブを追加
-            mainAction.actionAddMentionTab( mainAction.getGetMentionPeriod() );
-            jCheckBoxMenuItem4.setSelected(true);
-            jToggleButton4.setSelected(true);
-        }
-    }//GEN-LAST:event_jCheckBoxMenuItem4ActionPerformed
-
-    private void jCheckBoxMenuItem5ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCheckBoxMenuItem5ActionPerformed
-        if( mainAction.isExistDirectMessageTab() ) {
-            //dmタブを削除
-            mainAction.actionRemoveTabbedTable( TimerID.createDirectMessageID() );
-            jCheckBoxMenuItem5.setSelected(false);
-            jToggleButton5.setSelected(false);
-        }else {
-            //dmタブを追加
-            mainAction.actionAddDirectMessageTab( mainAction.getGetDirectMessagePeriod() );
-            jCheckBoxMenuItem5.setSelected(true);
-            jToggleButton5.setSelected(true);
-        }
-    }//GEN-LAST:event_jCheckBoxMenuItem5ActionPerformed
-
-    private void jCheckBoxMenuItem6ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCheckBoxMenuItem6ActionPerformed
-        if( mainAction.isExistSendDirectMessageTab() ) {
-            //タイムラインタブを削除
-            mainAction.actionRemoveTabbedTable( TimerID.createSendDirectMessageID() );
-            jCheckBoxMenuItem6.setSelected(false);
-            jToggleButton6.setSelected(false);
-        }else {
-            //タイムラインタブを追加
-            mainAction.actionAddSendDirectMessageTab( mainAction.getGetSendDirectMessagePeriod() );
-            jCheckBoxMenuItem6.setSelected(true);
-            jToggleButton6.setSelected(true);
-        }
-    }//GEN-LAST:event_jCheckBoxMenuItem6ActionPerformed
-
-    private void jToggleButton4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jToggleButton4ActionPerformed
-        jCheckBoxMenuItem4ActionPerformed(evt);
-    }//GEN-LAST:event_jToggleButton4ActionPerformed
-
-    private void jToggleButton5ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jToggleButton5ActionPerformed
-        jCheckBoxMenuItem5ActionPerformed(evt);
-    }//GEN-LAST:event_jToggleButton5ActionPerformed
-
-    private void jToggleButton6ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jToggleButton6ActionPerformed
-        jCheckBoxMenuItem6ActionPerformed(evt);
-    }//GEN-LAST:event_jToggleButton6ActionPerformed
-
-    private void jMenuItem11ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem11ActionPerformed
-        //reply
-        this.mainAction.actionSetReplyStatusToTweetBoxPane();
-    }//GEN-LAST:event_jMenuItem11ActionPerformed
-
-    private void jMenuItem12ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem12ActionPerformed
-        //reply all
-        this.mainAction.actionSetReplyAllStatusToTweetBoxPane();
-    }//GEN-LAST:event_jMenuItem12ActionPerformed
+        private void jMenuItem31ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem31ActionPerformed
+            mainAction.actionShowUserSearchDialog();
+        }//GEN-LAST:event_jMenuItem31ActionPerformed
 
-    private void jMenuItem13ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem13ActionPerformed
-        //official rt
-        this.mainAction.actionRetweet();
-    }//GEN-LAST:event_jMenuItem13ActionPerformed
+        private void jMenuItem32ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem32ActionPerformed
+            mainAction.actionShowOutputCSVLogDialog();
+        }//GEN-LAST:event_jMenuItem32ActionPerformed
 
-    private void jMenuItem15ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem15ActionPerformed
-        this.mainAction.actionCopySelectedStatusToTweetBoxPane();
-    }//GEN-LAST:event_jMenuItem15ActionPerformed
+        private void jMenuItem33ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem33ActionPerformed
+            mainAction.actionConvertTweetBoxURLToBitly();
+        }//GEN-LAST:event_jMenuItem33ActionPerformed
 
-    private void jMenuItem14ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem14ActionPerformed
-        this.mainAction.actionSetQuoteStatusToTweetBoxPane();
-    }//GEN-LAST:event_jMenuItem14ActionPerformed
+        private void jMenuItem34ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem34ActionPerformed
+            mainAction.actionShowFollowingFollowerDialog();
+        }//GEN-LAST:event_jMenuItem34ActionPerformed
 
-    private void jMenuItem16ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem16ActionPerformed
-        this.mainAction.actionShowDirectMessageDialog();
-    }//GEN-LAST:event_jMenuItem16ActionPerformed
+        private void jMenuItem35ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem35ActionPerformed
+            mainAction.actionOpenFollowing();
+        }//GEN-LAST:event_jMenuItem35ActionPerformed
 
-    private void jMenuItem17ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem17ActionPerformed
-        this.mainAction.actionOpenStatusURL();
-    }//GEN-LAST:event_jMenuItem17ActionPerformed
+        private void jMenuItem36ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem36ActionPerformed
+            mainAction.actionOpenFollower();
+        }//GEN-LAST:event_jMenuItem36ActionPerformed
 
-    private void jMenuItem18ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem18ActionPerformed
-        this.mainAction.actionSelectedUserTimeline();
-    }//GEN-LAST:event_jMenuItem18ActionPerformed
-
-    private void jMenuItem21ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem21ActionPerformed
-        this.mainAction.actionOpenUserURL();
-    }//GEN-LAST:event_jMenuItem21ActionPerformed
-
-    private void jMenuItem22ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem22ActionPerformed
-        this.mainAction.actionOpenUserFav();
-    }//GEN-LAST:event_jMenuItem22ActionPerformed
-
-    private void jMenuItem19ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem19ActionPerformed
-        this.mainAction.actionCreateFavorite();
-    }//GEN-LAST:event_jMenuItem19ActionPerformed
-
-    private void jMenuItem20ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem20ActionPerformed
-        this.mainAction.actionDestroyFavorite();
-    }//GEN-LAST:event_jMenuItem20ActionPerformed
-
-    private void jMenuItem23ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem23ActionPerformed
-        this.mainAction.actionShowHashtagSearchDialog();
-    }//GEN-LAST:event_jMenuItem23ActionPerformed
-
-    /**
+    private void logSaveCheckItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_logSaveCheckItemActionPerformed
+       mainAction.setSaveLog(this.logSaveCheckItem.getState());
+        try {
+            mainAction.saveProperties();
+        } catch (IOException ex) {
+            Logger.getLogger(NishioTweetManager.class.getName()).log(Level.SEVERE, null, ex);
+        }
+    }//GEN-LAST:event_logSaveCheckItemActionPerformed
+
+    private void isUsingStreamingMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_isUsingStreamingMenuItemActionPerformed
+       if( mainAction.isUsingStreaming() ) {
+           mainAction.stopStreaming();
+       }else {
+           mainAction.startStreaming();
+       }
+    }//GEN-LAST:event_isUsingStreamingMenuItemActionPerformed
+
+    private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jButton4ActionPerformed
+       // メッセージをつぶやく
+       mainAction.actionTweet();
+       updateLen();
+    }// GEN-LAST:event_jButton4ActionPerformed
+
+    private void tweetMessageBoxComponentResized(
+                                                java.awt.event.ComponentEvent evt) {// GEN-FIRST:event_tweetMessageBoxComponentResized
+    }// GEN-LAST:event_tweetMessageBoxComponentResized
+
+    private void jTextPaneKeyReleased(java.awt.event.KeyEvent evt) {// GEN-FIRST:event_jTextPaneKeyReleased
+       // 残りつぶやける文字数情報を更新
+       mainAction.actionUpdateTweetMessageCount();
+    }// GEN-LAST:event_jTextPaneKeyReleased
+
+    private void jTextPaneFocusGained(java.awt.event.FocusEvent evt) {// GEN-FIRST:event_jTextPaneFocusGained
+       updateLen();
+    }// GEN-LAST:event_jTextPaneFocusGained
+
+    private void jTextPaneFocusLost(java.awt.event.FocusEvent evt) {// GEN-FIRST:event_jTextPaneFocusLost
+       updateLen();
+    }// GEN-LAST:event_jTextPaneFocusLost
+
+       private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jMenuItem1ActionPerformed
+               // 終了動作
+               mainAction.actionExitButton(evt);
+       }// GEN-LAST:event_jMenuItem1ActionPerformed
+
+       private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jMenuItem2ActionPerformed
+               // 基本設定ダイアログを開く
+               mainAction.actionBasicSettingDialog();
+       }// GEN-LAST:event_jMenuItem2ActionPerformed
+
+       private void jMenuItem3ActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jMenuItem3ActionPerformed
+               mainAction.actionShowAboutDialog();
+       }// GEN-LAST:event_jMenuItem3ActionPerformed
+
+       private void jMenuItem4ActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jMenuItem4ActionPerformed
+               mainAction.actionShowAccountDialog();
+       }// GEN-LAST:event_jMenuItem4ActionPerformed
+
+       private void jMenuItem5ActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jMenuItem5ActionPerformed
+               // 選択しているタブを削除
+               mainAction.actionRemoveFocusedTabbedTable();
+       }// GEN-LAST:event_jMenuItem5ActionPerformed
+
+       private void jMenuItem6ActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jMenuItem6ActionPerformed
+               this.mainAction.actionShowKeywordSearchDialog();
+       }// GEN-LAST:event_jMenuItem6ActionPerformed
+
+       private void jMenuItem7ActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jMenuItem7ActionPerformed
+               mainAction.actionUpdateButton(evt);
+               // いますぐ更新ボタンを押したので,更新タイムを一度リセットする
+               // mainAction.resetTweetAutoUpdate();
+       }// GEN-LAST:event_jMenuItem7ActionPerformed
+
+       private void jMenuItem8ActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jMenuItem8ActionPerformed
+               // tweet取得時間情報を更新
+               mainAction.actionRefreshTime();
+       }// GEN-LAST:event_jMenuItem8ActionPerformed
+
+       private void jMenuItem9ActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jMenuItem9ActionPerformed
+               mainAction.debug();
+       }// GEN-LAST:event_jMenuItem9ActionPerformed
+
+       private void jTextPaneCaretUpdate(javax.swing.event.CaretEvent evt) {// GEN-FIRST:event_jTextPaneCaretUpdate
+               // TODO add your handling code here:
+       }// GEN-LAST:event_jTextPaneCaretUpdate
+
+       private void statusBarPropertyChange(java.beans.PropertyChangeEvent evt) {// GEN-FIRST:event_statusBarPropertyChange
+
+       }// GEN-LAST:event_statusBarPropertyChange
+
+       private void jMenuItem10ActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jMenuItem10ActionPerformed
+               // フォーカスのあるタブだけ更新
+               mainAction.actionFocusedTableUpdate();
+       }// GEN-LAST:event_jMenuItem10ActionPerformed
+
+       private void jCheckBoxMenuItem1ActionPerformed(
+                       java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jCheckBoxMenuItem1ActionPerformed
+               // 詳細情報ボタンを押した時の動作
+               mainAction.actionDetailInfoButton(evt);
+               jCheckBoxMenuItem1.setSelected(mainAction.isDetailInfoPanelVisible());
+               jToggleButton1.setSelected(mainAction.isDetailInfoPanelVisible());
+       }// GEN-LAST:event_jCheckBoxMenuItem1ActionPerformed
+
+       private void jCheckBoxMenuItem2ActionPerformed(
+                       java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jCheckBoxMenuItem2ActionPerformed
+               // 書き込みボタン表示
+               mainAction.actionShowTweetboxButton(evt);
+               this.invalidate();
+               this.validate();
+
+               jCheckBoxMenuItem2.setSelected(mainAction.isShowTweetBoxVisible());
+               jToggleButton2.setSelected(mainAction.isShowTweetBoxVisible());
+       }// GEN-LAST:event_jCheckBoxMenuItem2ActionPerformed
+
+       private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jButton1ActionPerformed
+               jMenuItem10ActionPerformed(evt);
+       }// GEN-LAST:event_jButton1ActionPerformed
+
+       private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jButton2ActionPerformed
+               jMenuItem6ActionPerformed(evt);
+       }// GEN-LAST:event_jButton2ActionPerformed
+
+       private void jToggleButton1ActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jToggleButton1ActionPerformed
+               jCheckBoxMenuItem1ActionPerformed(evt);
+       }// GEN-LAST:event_jToggleButton1ActionPerformed
+
+       private void jToggleButton2ActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jToggleButton2ActionPerformed
+               jCheckBoxMenuItem2ActionPerformed(evt);
+       }// GEN-LAST:event_jToggleButton2ActionPerformed
+
+       private void jCheckBoxMenuItem3ActionPerformed(
+                       java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jCheckBoxMenuItem3ActionPerformed
+               if (mainAction.isExistTimelineTab()) {
+                       // タイムラインタブを削除
+                       mainAction.actionRemoveTabbedTable(TimerID.createTimelineID());
+                       jCheckBoxMenuItem3.setSelected(false);
+                       jToggleButton3.setSelected(false);
+               } else {
+                       // タイムラインタブを追加
+                       mainAction.actionAddTimelineTab(mainAction.getGetTimelinePeriod());
+                       jCheckBoxMenuItem3.setSelected(true);
+                       jToggleButton3.setSelected(true);
+               }
+       }// GEN-LAST:event_jCheckBoxMenuItem3ActionPerformed
+
+       private void jToggleButton3ActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jToggleButton3ActionPerformed
+               jCheckBoxMenuItem3ActionPerformed(evt);
+       }// GEN-LAST:event_jToggleButton3ActionPerformed
+
+       private void jTabbedPane1ComponentRemoved(java.awt.event.ContainerEvent evt) {// GEN-FIRST:event_jTabbedPane1ComponentRemoved
+
+       }// GEN-LAST:event_jTabbedPane1ComponentRemoved
+
+       private void jCheckBoxMenuItem4ActionPerformed(
+                       java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jCheckBoxMenuItem4ActionPerformed
+               if (mainAction.isExistMentionTab()) {
+                       // mentionタブを削除
+                       mainAction.actionRemoveTabbedTable(TimerID.createMentionID());
+                       jCheckBoxMenuItem4.setSelected(false);
+                       jToggleButton4.setSelected(false);
+               } else {
+                       // mentionタブを追加
+                       mainAction.actionAddMentionTab(mainAction.getGetMentionPeriod());
+                       jCheckBoxMenuItem4.setSelected(true);
+                       jToggleButton4.setSelected(true);
+               }
+       }// GEN-LAST:event_jCheckBoxMenuItem4ActionPerformed
+
+       private void jCheckBoxMenuItem5ActionPerformed(
+                       java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jCheckBoxMenuItem5ActionPerformed
+               if (mainAction.isExistDirectMessageTab()) {
+                       // dmタブを削除
+                       mainAction.actionRemoveTabbedTable(TimerID.createDirectMessageID());
+                       jCheckBoxMenuItem5.setSelected(false);
+                       jToggleButton5.setSelected(false);
+               } else {
+                       // dmタブを追加
+                       mainAction.actionAddDirectMessageTab(mainAction
+                                       .getGetDirectMessagePeriod());
+                       jCheckBoxMenuItem5.setSelected(true);
+                       jToggleButton5.setSelected(true);
+               }
+       }// GEN-LAST:event_jCheckBoxMenuItem5ActionPerformed
+
+       private void jCheckBoxMenuItem6ActionPerformed(
+                       java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jCheckBoxMenuItem6ActionPerformed
+               if (mainAction.isExistSendDirectMessageTab()) {
+                       // タイムラインタブを削除
+                       mainAction.actionRemoveTabbedTable(TimerID
+                                       .createSendDirectMessageID());
+                       jCheckBoxMenuItem6.setSelected(false);
+                       jToggleButton6.setSelected(false);
+               } else {
+                       // タイムラインタブを追加
+                       mainAction.actionAddSendDirectMessageTab(mainAction
+                                       .getGetSendDirectMessagePeriod());
+                       jCheckBoxMenuItem6.setSelected(true);
+                       jToggleButton6.setSelected(true);
+               }
+       }// GEN-LAST:event_jCheckBoxMenuItem6ActionPerformed
+
+       private void jToggleButton4ActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jToggleButton4ActionPerformed
+               jCheckBoxMenuItem4ActionPerformed(evt);
+       }// GEN-LAST:event_jToggleButton4ActionPerformed
+
+       private void jToggleButton5ActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jToggleButton5ActionPerformed
+               jCheckBoxMenuItem5ActionPerformed(evt);
+       }// GEN-LAST:event_jToggleButton5ActionPerformed
+
+       private void jToggleButton6ActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jToggleButton6ActionPerformed
+               jCheckBoxMenuItem6ActionPerformed(evt);
+       }// GEN-LAST:event_jToggleButton6ActionPerformed
+
+       private void jMenuItem11ActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jMenuItem11ActionPerformed
+               // reply
+               this.mainAction.actionSetReplyStatusToTweetBoxPane();
+       }// GEN-LAST:event_jMenuItem11ActionPerformed
+
+       private void jMenuItem12ActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jMenuItem12ActionPerformed
+               // reply all
+               this.mainAction.actionSetReplyAllStatusToTweetBoxPane();
+       }// GEN-LAST:event_jMenuItem12ActionPerformed
+
+       private void jMenuItem13ActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jMenuItem13ActionPerformed
+               // official rt
+               this.mainAction.actionRetweet();
+       }// GEN-LAST:event_jMenuItem13ActionPerformed
+
+       private void jMenuItem15ActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jMenuItem15ActionPerformed
+               this.mainAction.actionCopySelectedStatusToTweetBoxPane();
+       }// GEN-LAST:event_jMenuItem15ActionPerformed
+
+       private void jMenuItem14ActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jMenuItem14ActionPerformed
+               this.mainAction.actionSetQuoteStatusToTweetBoxPane();
+       }// GEN-LAST:event_jMenuItem14ActionPerformed
+
+       private void jMenuItem16ActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jMenuItem16ActionPerformed
+               this.mainAction.actionShowDirectMessageDialog();
+       }// GEN-LAST:event_jMenuItem16ActionPerformed
+
+       private void jMenuItem17ActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jMenuItem17ActionPerformed
+               this.mainAction.actionOpenStatusURL();
+       }// GEN-LAST:event_jMenuItem17ActionPerformed
+
+       private void jMenuItem18ActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jMenuItem18ActionPerformed
+               this.mainAction.actionSelectedUserTimeline();
+       }// GEN-LAST:event_jMenuItem18ActionPerformed
+
+       private void jMenuItem21ActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jMenuItem21ActionPerformed
+               this.mainAction.actionOpenUserURL();
+       }// GEN-LAST:event_jMenuItem21ActionPerformed
+
+       private void jMenuItem22ActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jMenuItem22ActionPerformed
+               this.mainAction.actionOpenUserFav();
+       }// GEN-LAST:event_jMenuItem22ActionPerformed
+
+       private void jMenuItem19ActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jMenuItem19ActionPerformed
+               this.mainAction.actionCreateFavorite();
+       }// GEN-LAST:event_jMenuItem19ActionPerformed
+
+       private void jMenuItem20ActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jMenuItem20ActionPerformed
+               this.mainAction.actionDestroyFavorite();
+       }// GEN-LAST:event_jMenuItem20ActionPerformed
+
+       private void jMenuItem23ActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jMenuItem23ActionPerformed
+               this.mainAction.actionShowHashtagSearchDialog();
+       }// GEN-LAST:event_jMenuItem23ActionPerformed
+
+       private void jMenuItem25ActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jMenuItem25ActionPerformed
+               this.mainAction.actionShowUserListDialog(mainAction.getScreenName(),
+                               ListGetterSelection.CREATED);
+       }// GEN-LAST:event_jMenuItem25ActionPerformed
+
+       private void jMenuItem24ActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jMenuItem24ActionPerformed
+               this.mainAction.actionShowUserListDialog(mainAction.getScreenName(),
+                               ListGetterSelection.SUBSCRIPTION);
+       }// GEN-LAST:event_jMenuItem24ActionPerformed
+
+       private void jMenuItem26ActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jMenuItem26ActionPerformed
+               this.mainAction.actionShowUserListDialog(mainAction.getScreenName(),
+                               ListGetterSelection.MEMBERSHIPS);
+       }// GEN-LAST:event_jMenuItem26ActionPerformed
+
+       private void jMenuItem27ActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jMenuItem27ActionPerformed
+               this.mainAction.actionShowSelectedUserList(ListGetterSelection.CREATED);
+       }// GEN-LAST:event_jMenuItem27ActionPerformed
+
+       private void jMenuItem28ActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jMenuItem28ActionPerformed
+               this.mainAction
+                               .actionShowSelectedUserList(ListGetterSelection.SUBSCRIPTION);
+       }// GEN-LAST:event_jMenuItem28ActionPerformed
+
+       private void jMenuItem29ActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jMenuItem29ActionPerformed
+               this.mainAction
+                               .actionShowSelectedUserList(ListGetterSelection.MEMBERSHIPS);
+       }// GEN-LAST:event_jMenuItem29ActionPerformed
+
+       private void jMenuItem30ActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jMenuItem30ActionPerformed
+               this.mainAction.actionOpenFav();
+       }// GEN-LAST:event_jMenuItem30ActionPerformed
+
+       /**
      *
      */
-    private void updateLen() {
-        // 残りつぶやける文字数情報を更新
-        mainAction.actionUpdateTweetMessageCount();
-    }
-
-    /**
-     * @param args the command line arguments
-     */
-    public static void main(String args[]) {
-        java.awt.EventQueue.invokeLater(new Runnable() {
-
-            @Override
-            public void run() {
+       private void updateLen() {
+               // 残りつぶやける文字数情報を更新
+               mainAction.actionUpdateTweetMessageCount();
+       }
+
+       /**
+        * @param args
+        *            the command line arguments
+        */
+       public static void main(String args[]) {
+               java.awt.EventQueue.invokeLater(new Runnable() {
+
+                       @Override
+                       public void run() {
+                               try {
+                                       // UIをシステム標準のものとする
+                                       UIManager.setLookAndFeel(UIManager
+                                                       .getSystemLookAndFeelClassName());
+
+                               } catch (Exception e) {
+                                       e.printStackTrace();
+                               }
+                               new NishioTweetManager().setVisible(true);
+                       }
+               });
+       }
+
+       /**
+        * Twitter初期化
+        */
+       private void init() {
+               // twitterログイン
+               boolean login = false;
+               try {
+                    tweetManager = new TweetManager();
+                    tweetManager.loginTwitter();
+                    login = true;
+               } catch (Exception e) {
+                       e.printStackTrace();
+               }
+
+               // メインアクション初期化
+               mainAction = new TweetMainAction(this, tweetManager, statusBar,
+                               jTextPane, jPanel3, tweetLengthLabel, jPanel1, jTabbedPane1,
+                               tweetMessageBox, userImageLabel, userNameLabel,
+                               updateTimeLabel, followerLabel, followingLabel, locationLabel,
+                               clientNameLabel, updateLabel, userIntroBox, userWebBox,
+                               jToggleButton3, jToggleButton4, jToggleButton5, jToggleButton6,
+                               jCheckBoxMenuItem3, jCheckBoxMenuItem4, jCheckBoxMenuItem5,
+                               jCheckBoxMenuItem6, trayIcon);
+               // ハッシュタグ用のハイパーリンクリスナーにアクション登録
+               this.hashTagHyperlinkListener.setMainAction(mainAction);
+               // もしログインに失敗したら,アカウント設定画面を出す
+               if (login == false) {
+                       mainAction.actionShowAccountDialog();
+               } else {
+                       // TLなどを表示するタブを追加
+                       // 自動更新も開始
+                       //タブがひとつもないかどうか
+                       boolean isNoTab = true;
+                       // TL, Mention, DMのタブなどを表示するかしないかの設定を読み込んで反映するようにする
+                       if( this.mainAction.isTempOpenedTimelineTab() ) {
+                               this.mainAction.actionAddTimelineTab(this.mainAction
+                                               .getGetTimelinePeriod());
+                               isNoTab = false;
+                       }
+                       if( this.mainAction.isTempOpenedMentionTab() ) {
+                               this.mainAction.actionAddMentionTab(this.mainAction
+                                               .getGetMentionPeriod());
+                               isNoTab = false;
+                       }
+                       if( this.mainAction.isTempOpenedDMTab() ) {
+                               this.mainAction.actionAddDirectMessageTab(this.mainAction
+                                               .getGetDirectMessagePeriod());
+                               isNoTab = false;
+                       }
+                       if( this.mainAction.isTempOpenedSendDMTab() ) {
+                               this.mainAction.actionAddSendDirectMessageTab(
+                                this.mainAction.getGetSendDirectMessagePeriod() );
+                               isNoTab = false;
+                       }
+
+                       //タブがひとつもないとき
+                       if( isNoTab == true ) {
+                               //Timelineタブを追加
+                               this.mainAction.actionAddTimelineTab(this.mainAction
+                                               .getGetTimelinePeriod());
+                       }
+                       // フォーカスを一番初めのテーブルに移す
+                       this.mainAction.actionRequestFocusToTab(0);
+               }
                 try {
-                    // UIをシステム標準のものとする
-                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
-
-                } catch (Exception e) {
+                    ClientVersionManager version = ClientVersionManager.getInstance();
+                    VersionInfo latest = version.getLatestVersionInfo();
+                    if( latest != null && !latest.getVersion().equals( version.getCurrentversion() )) {
+                        if( this.mainAction.isUpdateNotify() ) {
+                            //最新クライアント情報を通知するかどうか
+                            this.mainAction.actionShowUpdateDialog();
+                        }
+                    }
+                }catch(Exception e) {
                     e.printStackTrace();
                 }
-                new NishioTweetManager().setVisible(true);
-            }
-        });
-    }
-
-    /**
-     * Twitter初期化
-     */
-    private void init() {
-        // twitterログイン
-        boolean login = false;
-        try {
-            tweetManager.loginTwitter();
-            login = true;
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-
-        // メインアクション初期化
-        mainAction = new TweetMainAction(this, tweetManager, statusBar,
-                jTextPane, jPanel3, tweetLengthLabel, jPanel1, jTabbedPane1, tweetMessageBox, userImageLabel,
-                userNameLabel, updateTimeLabel, followerLabel, followingLabel, locationLabel,
-                clientNameLabel, updateLabel, userIntroBox, userWebBox, 
-                jToggleButton3, jToggleButton4, jToggleButton5, jToggleButton6,
-                jCheckBoxMenuItem3,jCheckBoxMenuItem4, jCheckBoxMenuItem5, jCheckBoxMenuItem6);
-        //ハッシュタグ用のハイパーリンクリスナーにアクション登録
-        this.hashTagHyperlinkListener.setMainAction(mainAction);
-        //もしログインに失敗したら,アカウント設定画面を出す
-        if (login == false) {
-            mainAction.actionShowAccountDialog();
-        } else {
-            //TLなどを表示するタブを追加
-            //自動更新も開始
-            //TODO:TL, Mention, DMのタブを表示するかしないかの設定を読み込んで反映するように
-            this.mainAction.actionAddTimelineTab( this.mainAction.getGetTimelinePeriod() );
-            this.mainAction.actionAddMentionTab( this.mainAction.getGetMentionPeriod() );
-            this.mainAction.actionAddDirectMessageTab( this.mainAction.getGetDirectMessagePeriod() );
-            //this.mainAction.actionAddSendDirectMessageTab( this.mainAction.getGetSendDirectMessagePeriod() );
-            //フォーカスを一番初めのテーブルに移す
-            this.mainAction.actionRequestFocusToTab(0);
-        }
-    }
 
-    /**
-     * チェックボックスすべてのチェック状態を更新
-     */
-    public void updateSelectedInformation() {
-        //checkボタンの状態を設定
-        //詳細情報
-        jCheckBoxMenuItem1.setSelected( mainAction.isDetailInfoPanelVisible() );
-        jToggleButton1.setSelected( mainAction.isDetailInfoPanelVisible() );
-        //書き込みボタン
-        jCheckBoxMenuItem2.setSelected(mainAction.isShowTweetBoxVisible());
-        jToggleButton2.setSelected( mainAction.isShowTweetBoxVisible() );
-        //TL表示
-        mainAction.updateCheckboxInformation();
-    }
-    
-    //nishio tweet manager
-    private JPopupMenu rightClickPopup = null;
-    private TweetMainAction mainAction = null;
-    // TweetManager
-    private TweetManager tweetManager = new TweetManager();
+               //Streaming APIを利用しているかどうかを表示
+               this.tweetManager.getStreamManager().addCollectionLifeCycleListener(this);
+               //streaming利用時はstreamingを開始する
+               if( this.mainAction.isUsingStreaming() ) {
+                   this.mainAction.startStreaming();
+               }
+       }
+
+       /**
+        * チェックボックスすべてのチェック状態を更新
+        */
+       public void updateSelectedInformation() {
+               // checkボタンの状態を設定
+               // 詳細情報
+               jCheckBoxMenuItem1.setSelected(mainAction.isDetailInfoPanelVisible());
+               jToggleButton1.setSelected(mainAction.isDetailInfoPanelVisible());
+               // 書き込みボタン
+               jCheckBoxMenuItem2.setSelected(mainAction.isShowTweetBoxVisible());
+               jToggleButton2.setSelected(mainAction.isShowTweetBoxVisible());
+                //log保存
+                logSaveCheckItem.setSelected(mainAction.isSaveLog());
+               // TL表示
+               mainAction.updateCheckboxInformation();
+               //streaming apiを利用するかどうか
+               isUsingStreamingMenuItem.setSelected(mainAction.isUsingStreaming());
+       }
+
+       /**
+        * streaming api接続時
+        */
+       public void onConnect() {
+           streamingLabel.setText("StreamingAPI開始");
+       }
+
+       /**
+        * streaming api接続解除時
+        */
+       public void onDisconnect() {
+           streamingLabel.setText("StreamingAPI停止中");
+       }
+
+       /**
+        * streaming apiクリーンアップ時
+        */
+       public void onCleanUp() {
+           //nothing
+       }
+
+       // nishio tweet manager
+       private JPopupMenu rightClickPopup = null;
+       private TweetMainAction mainAction = null;
+       // TweetManager
+       private TweetManager tweetManager = null;
     // Variables declaration - do not modify//GEN-BEGIN:variables
     private javax.swing.JEditorPane clientNameLabel;
     private javax.swing.JLabel followerLabel;
     private javax.swing.JLabel followingLabel;
+    private javax.swing.JCheckBoxMenuItem isUsingStreamingMenuItem;
     private javax.swing.JButton jButton1;
     private javax.swing.JButton jButton2;
     private javax.swing.JButton jButton4;
@@ -1281,6 +1643,9 @@ public class NishioTweetManager extends javax.swing.JFrame {
     private javax.swing.JMenu jMenu4;
     private javax.swing.JMenu jMenu5;
     private javax.swing.JMenu jMenu6;
+    private javax.swing.JMenu jMenu7;
+    private javax.swing.JMenu jMenu8;
+    private javax.swing.JMenu jMenu9;
     private javax.swing.JMenuBar jMenuBar1;
     private javax.swing.JMenuItem jMenuItem1;
     private javax.swing.JMenuItem jMenuItem10;
@@ -1298,7 +1663,20 @@ public class NishioTweetManager extends javax.swing.JFrame {
     private javax.swing.JMenuItem jMenuItem21;
     private javax.swing.JMenuItem jMenuItem22;
     private javax.swing.JMenuItem jMenuItem23;
+    private javax.swing.JMenuItem jMenuItem24;
+    private javax.swing.JMenuItem jMenuItem25;
+    private javax.swing.JMenuItem jMenuItem26;
+    private javax.swing.JMenuItem jMenuItem27;
+    private javax.swing.JMenuItem jMenuItem28;
+    private javax.swing.JMenuItem jMenuItem29;
     private javax.swing.JMenuItem jMenuItem3;
+    private javax.swing.JMenuItem jMenuItem30;
+    private javax.swing.JMenuItem jMenuItem31;
+    private javax.swing.JMenuItem jMenuItem32;
+    private javax.swing.JMenuItem jMenuItem33;
+    private javax.swing.JMenuItem jMenuItem34;
+    private javax.swing.JMenuItem jMenuItem35;
+    private javax.swing.JMenuItem jMenuItem36;
     private javax.swing.JMenuItem jMenuItem4;
     private javax.swing.JMenuItem jMenuItem5;
     private javax.swing.JMenuItem jMenuItem6;
@@ -1308,6 +1686,7 @@ public class NishioTweetManager extends javax.swing.JFrame {
     private javax.swing.JPanel jPanel1;
     private javax.swing.JPanel jPanel2;
     private javax.swing.JPanel jPanel3;
+    private javax.swing.JPanel jPanel4;
     private javax.swing.JScrollPane jScrollPane5;
     private javax.swing.JScrollPane jScrollPane6;
     private javax.swing.JScrollPane jScrollPane7;
@@ -1319,6 +1698,7 @@ public class NishioTweetManager extends javax.swing.JFrame {
     private javax.swing.JPopupMenu.Separator jSeparator4;
     private javax.swing.JPopupMenu.Separator jSeparator5;
     private javax.swing.JPopupMenu.Separator jSeparator6;
+    private javax.swing.JPopupMenu.Separator jSeparator7;
     private javax.swing.JTabbedPane jTabbedPane1;
     private javax.swing.JTextPane jTextPane;
     private javax.swing.JToggleButton jToggleButton1;
@@ -1329,7 +1709,9 @@ public class NishioTweetManager extends javax.swing.JFrame {
     private javax.swing.JToggleButton jToggleButton6;
     private javax.swing.JToolBar jToolBar1;
     private javax.swing.JLabel locationLabel;
+    private javax.swing.JCheckBoxMenuItem logSaveCheckItem;
     private javax.swing.JLabel statusBar;
+    private javax.swing.JLabel streamingLabel;
     private javax.swing.JLabel tweetLengthLabel;
     private javax.swing.JEditorPane tweetMessageBox;
     private javax.swing.JLabel updateLabel;
@@ -1339,4 +1721,5 @@ public class NishioTweetManager extends javax.swing.JFrame {
     private javax.swing.JLabel userNameLabel;
     private javax.swing.JEditorPane userWebBox;
     // End of variables declaration//GEN-END:variables
+
 }