OSDN Git Service

キーワード検索の為のダイアログをメニューバーから呼び出せるように改良.
[nt-manager/nt-manager.git] / src / twitter / gui / form / NishioTweetManager.java
1 /*
2  * To change this template, choose Tools | Templates
3  * and open the template in the editor.
4  */
5
6 /*
7  * NishioTweetManager.java
8  *
9  * Created on 2010/09/06, 3:32:04
10  */
11 package twitter.gui.form;
12
13 import java.awt.AWTException;
14 import java.awt.Image;
15 import java.awt.MenuItem;
16 import java.awt.Point;
17 import java.awt.PopupMenu;
18 import java.awt.SystemTray;
19 import java.awt.TrayIcon;
20 import java.awt.event.ActionEvent;
21 import java.awt.event.ActionListener;
22 import java.awt.event.MouseAdapter;
23 import java.awt.event.MouseEvent;
24 import java.awt.image.BufferedImage;
25 import java.net.URL;
26 import javax.swing.ImageIcon;
27 import javax.swing.JFrame;
28 import javax.swing.JMenuItem;
29 import javax.swing.JPopupMenu;
30 import javax.swing.JTable;
31 import javax.swing.UIManager;
32 import javax.swing.WindowConstants;
33 import javax.swing.event.ListSelectionEvent;
34 import javax.swing.event.ListSelectionListener;
35 import javax.swing.table.TableColumn;
36 import javax.swing.table.TableColumnModel;
37 import javax.swing.text.Style;
38 import javax.swing.text.StyleConstants;
39 import javax.swing.text.html.HTMLDocument;
40 import javax.swing.text.html.StyleSheet;
41 import twitter.gui.action.TweetMainAction;
42 import twitter.gui.component.TweetCommentRenderer;
43 import twitter.gui.component.TweetHyperlinkHandler;
44 import twitter.gui.component.TweetTableModel;
45 import twitter.gui.component.UserImageRenderer;
46 import twitter.manage.TweetManager;
47 import twitter4j.Status;
48
49 /**
50  *
51  * @author nishio
52  */
53 public class NishioTweetManager extends javax.swing.JFrame {
54
55     private SystemTray systemTray;
56     private TrayIcon trayIcon;
57
58     /** Creates new form NishioTweetManager */
59     public NishioTweetManager() {
60         initComponents();
61         //component初期化
62         initComponents2();
63         //twitterコード初期化
64         init();
65     }
66
67     /**
68      * コンポーネント初期化
69      */
70     private void initComponents2() {
71         Image image = null;
72         try {
73             //トレイイメージ
74             /*URL resource = getClass().getResource("icon.png");
75             image = new ImageIcon(resource).getImage();*/
76             image = new ImageIcon("resources/icon.png").getImage();
77             //フレームのアイコン設定
78             this.setIconImage(image);
79         } catch (Exception e) {
80             e.printStackTrace();
81             image = new BufferedImage(32, 32, BufferedImage.TYPE_INT_RGB);
82         }
83         //システムトライ関係
84         systemTray = SystemTray.getSystemTray();
85         final JFrame frame = this;
86         final PopupMenu popup = new PopupMenu();
87         trayIcon = new TrayIcon(image, "Nishio Tweet Manager", popup);
88
89         //左クリックした時に「画面を開く」アクションをする
90         trayIcon.addMouseListener(new MouseAdapter() {
91
92             @Override
93             public void mousePressed(MouseEvent me) {
94                 //左クリック
95                 if (me.getButton() == MouseEvent.BUTTON1) {
96                     frame.setVisible(true);
97                 }
98             }
99         });
100
101         //右クリック時のポップアップメニュー
102         MenuItem item1 = new MenuItem("画面を開く");
103         item1.addActionListener(new ActionListener() {
104
105             public void actionPerformed(ActionEvent e) {
106                 frame.setVisible(true);
107             }
108         });
109         MenuItem item2 = new MenuItem("終了");
110         item2.addActionListener(new ActionListener() {
111
112             public void actionPerformed(ActionEvent e) {
113                 systemTray.remove(trayIcon);
114                 frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
115                 frame.dispose();
116                 System.exit(0);
117             }
118         });
119         popup.add(item1);
120         popup.add(item2);
121
122         try {
123             systemTray.add(trayIcon);
124         } catch (AWTException e) {
125             e.printStackTrace();
126         }
127     }
128
129     /** This method is called from within the constructor to
130      * initialize the form.
131      * WARNING: Do NOT modify this code. The content of this method is
132      * always regenerated by the Form Editor.
133      */
134     @SuppressWarnings("unchecked")
135     // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
136     private void initComponents() {
137
138         jTabbedPane1 = new javax.swing.JTabbedPane();
139         jScrollPane1 = new javax.swing.JScrollPane();
140         jTable = new javax.swing.JTable();
141         jScrollPane2 = new javax.swing.JScrollPane();
142         jTable1 = new javax.swing.JTable();
143         jScrollPane3 = new javax.swing.JScrollPane();
144         jTable2 = new javax.swing.JTable();
145         jScrollPane4 = new javax.swing.JScrollPane();
146         jTable3 = new javax.swing.JTable();
147         jPanel1 = new javax.swing.JPanel();
148         userImageLabel = new javax.swing.JLabel();
149         jScrollPane5 = new javax.swing.JScrollPane();
150         tweetMessageBox = new javax.swing.JEditorPane();
151         jLabel3 = new javax.swing.JLabel();
152         jLabel4 = new javax.swing.JLabel();
153         jLabel5 = new javax.swing.JLabel();
154         userNameLabel = new javax.swing.JLabel();
155         updateTimeLabel = new javax.swing.JLabel();
156         locationLabel = new javax.swing.JLabel();
157         jLabel9 = new javax.swing.JLabel();
158         followingLabel = new javax.swing.JLabel();
159         followerLabel = new javax.swing.JLabel();
160         jLabel12 = new javax.swing.JLabel();
161         jLabel13 = new javax.swing.JLabel();
162         updateLabel = new javax.swing.JLabel();
163         jScrollPane6 = new javax.swing.JScrollPane();
164         userIntroBox = new javax.swing.JEditorPane();
165         jScrollPane7 = new javax.swing.JScrollPane();
166         userWebBox = new javax.swing.JEditorPane();
167         jScrollPane8 = new javax.swing.JScrollPane();
168         clientNameLabel = new javax.swing.JEditorPane();
169         jButton1 = new javax.swing.JButton();
170         jButton2 = new javax.swing.JButton();
171         jScrollPane9 = new javax.swing.JScrollPane();
172         jTextPane = new javax.swing.JTextPane();
173         jLabel15 = new javax.swing.JLabel();
174         tweetLengthLabel = new javax.swing.JLabel();
175         jButton4 = new javax.swing.JButton();
176         jToggleButton1 = new javax.swing.JToggleButton();
177         statusBar = new javax.swing.JLabel();
178         jToggleButton2 = new javax.swing.JToggleButton();
179         jMenuBar1 = new javax.swing.JMenuBar();
180         jMenu1 = new javax.swing.JMenu();
181         jMenuItem1 = new javax.swing.JMenuItem();
182         jMenu4 = new javax.swing.JMenu();
183         jMenuItem5 = new javax.swing.JMenuItem();
184         jMenu5 = new javax.swing.JMenu();
185         jMenuItem6 = new javax.swing.JMenuItem();
186         jMenu2 = new javax.swing.JMenu();
187         jMenuItem2 = new javax.swing.JMenuItem();
188         jMenuItem4 = new javax.swing.JMenuItem();
189         jMenu3 = new javax.swing.JMenu();
190         jMenuItem3 = new javax.swing.JMenuItem();
191
192         setTitle("Nishio Tweet Manager");
193
194         jTable.setModel(tweetTableModel);
195         jTable.getTableHeader().setReorderingAllowed(false);
196         jTable.addMouseListener(new java.awt.event.MouseAdapter() {
197             public void mousePressed(java.awt.event.MouseEvent evt) {
198                 jTableMousePressed(evt);
199             }
200             public void mouseReleased(java.awt.event.MouseEvent evt) {
201                 jTableMouseReleased(evt);
202             }
203         });
204         jTable.addFocusListener(new java.awt.event.FocusAdapter() {
205             public void focusGained(java.awt.event.FocusEvent evt) {
206                 jTableFocusGained(evt);
207             }
208         });
209         jScrollPane1.setViewportView(jTable);
210
211         jTabbedPane1.addTab("Timeline", jScrollPane1);
212
213         jTable1.setModel(mentionTableModel);
214         jTable1.getTableHeader().setReorderingAllowed(false);
215         jTable1.addMouseListener(new java.awt.event.MouseAdapter() {
216             public void mousePressed(java.awt.event.MouseEvent evt) {
217                 jTable1MousePressed(evt);
218             }
219             public void mouseReleased(java.awt.event.MouseEvent evt) {
220                 jTable1MouseReleased(evt);
221             }
222         });
223         jTable1.addFocusListener(new java.awt.event.FocusAdapter() {
224             public void focusGained(java.awt.event.FocusEvent evt) {
225                 jTable1FocusGained(evt);
226             }
227         });
228         jScrollPane2.setViewportView(jTable1);
229
230         jTabbedPane1.addTab("Mention", jScrollPane2);
231
232         jTable2.setModel(messageTableModel);
233         jTable2.getTableHeader().setReorderingAllowed(false);
234         jTable2.addMouseListener(new java.awt.event.MouseAdapter() {
235             public void mousePressed(java.awt.event.MouseEvent evt) {
236                 jTable2MousePressed(evt);
237             }
238             public void mouseReleased(java.awt.event.MouseEvent evt) {
239                 jTable2MouseReleased(evt);
240             }
241         });
242         jTable2.addFocusListener(new java.awt.event.FocusAdapter() {
243             public void focusGained(java.awt.event.FocusEvent evt) {
244                 jTable2FocusGained(evt);
245             }
246         });
247         jScrollPane3.setViewportView(jTable2);
248
249         jTabbedPane1.addTab("Message", jScrollPane3);
250
251         jTable3.setModel(sendMessageTableModel);
252         jTable3.getTableHeader().setReorderingAllowed(false);
253         jScrollPane4.setViewportView(jTable3);
254
255         jTabbedPane1.addTab("Send", jScrollPane4);
256
257         jPanel1.setBorder(javax.swing.BorderFactory.createEtchedBorder());
258
259         userImageLabel.setBackground(java.awt.Color.black);
260         userImageLabel.setOpaque(true);
261
262         jScrollPane5.setHorizontalScrollBar(null);
263
264         tweetMessageBox.setContentType("text/html");
265         tweetMessageBox.setEditable(false);
266         tweetMessageBox.addComponentListener(new java.awt.event.ComponentAdapter() {
267             public void componentResized(java.awt.event.ComponentEvent evt) {
268                 tweetMessageBoxComponentResized(evt);
269             }
270         });
271         tweetMessageBox.addHyperlinkListener(new TweetHyperlinkHandler());
272         jScrollPane5.setViewportView(tweetMessageBox);
273
274         jLabel3.setText("ユーザ名");
275
276         jLabel4.setText("更新日");
277
278         jLabel5.setText("現在地");
279
280         userNameLabel.setText("UserName");
281
282         updateTimeLabel.setText("Date");
283
284         locationLabel.setText("Information");
285
286         jLabel9.setText("Following");
287
288         followingLabel.setText("0");
289
290         followerLabel.setText("0");
291
292         jLabel12.setText("Follower");
293
294         jLabel13.setText("更新回数");
295
296         updateLabel.setText("0");
297
298         jScrollPane6.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
299
300         userIntroBox.setContentType("text/html");
301         userIntroBox.setEditable(false);
302         userIntroBox.setMinimumSize(new java.awt.Dimension(120, 20));
303         jScrollPane6.setViewportView(userIntroBox);
304
305         jScrollPane7.setBorder(null);
306         jScrollPane7.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
307         jScrollPane7.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
308
309         userWebBox.setBorder(null);
310         userWebBox.setContentType("text/html");
311         userWebBox.setEditable(false);
312         userWebBox.setEditable(false);
313         userWebBox.addHyperlinkListener(new TweetHyperlinkHandler());
314         try {
315             // htmlフォント変更
316             HTMLDocument doc = (HTMLDocument) userWebBox.getDocument();
317             StyleSheet[] style = doc.getStyleSheet().getStyleSheets();
318             for (int i = style.length - 1; i >= 0; i--) {
319                 Style body = style[i].getStyle("body");
320                 if (body != null) {
321                     // TODO: change default font size
322                     StyleConstants.setFontSize(body, 13);
323                 }
324             }
325         } catch (Exception e) {
326             e.printStackTrace();
327         }
328         jScrollPane7.setViewportView(userWebBox);
329
330         jScrollPane8.setBorder(null);
331         jScrollPane8.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
332         jScrollPane8.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
333
334         clientNameLabel.setBorder(null);
335         clientNameLabel.setContentType("text/html");
336         clientNameLabel.setEditable(false);
337         clientNameLabel.setEditable(false);
338         clientNameLabel.addHyperlinkListener(new TweetHyperlinkHandler());
339         try {
340             // htmlフォント変更
341             HTMLDocument doc = (HTMLDocument) clientNameLabel.getDocument();
342             StyleSheet[] style = doc.getStyleSheet().getStyleSheets();
343             for (int i = style.length - 1; i >= 0; i--) {
344                 Style body = style[i].getStyle("body");
345                 if (body != null) {
346                     // TODO: default font size
347                     StyleConstants.setFontSize(body, 13);
348                 }
349             }
350         } catch (Exception e) {
351             e.printStackTrace();
352         }
353         jScrollPane8.setViewportView(clientNameLabel);
354
355         javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
356         jPanel1.setLayout(jPanel1Layout);
357         jPanel1Layout.setHorizontalGroup(
358             jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
359             .addGroup(jPanel1Layout.createSequentialGroup()
360                 .addComponent(userImageLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 48, javax.swing.GroupLayout.PREFERRED_SIZE)
361                 .addGap(3, 3, 3)
362                 .addComponent(jScrollPane5, javax.swing.GroupLayout.DEFAULT_SIZE, 674, Short.MAX_VALUE))
363             .addGroup(jPanel1Layout.createSequentialGroup()
364                 .addContainerGap()
365                 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
366                     .addGroup(jPanel1Layout.createSequentialGroup()
367                         .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
368                             .addComponent(jLabel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
369                             .addComponent(jLabel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
370                             .addComponent(jLabel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
371                         .addGap(18, 18, 18)
372                         .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
373                             .addComponent(locationLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 183, javax.swing.GroupLayout.PREFERRED_SIZE)
374                             .addComponent(userNameLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 183, javax.swing.GroupLayout.PREFERRED_SIZE)
375                             .addComponent(updateTimeLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 183, javax.swing.GroupLayout.PREFERRED_SIZE))
376                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
377                         .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
378                             .addComponent(jLabel13, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
379                             .addComponent(jLabel12, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
380                             .addComponent(jLabel9))
381                         .addGap(18, 18, 18)
382                         .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
383                             .addComponent(updateLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
384                             .addComponent(followerLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 68, Short.MAX_VALUE)
385                             .addComponent(followingLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
386                     .addGroup(jPanel1Layout.createSequentialGroup()
387                         .addComponent(jScrollPane7, javax.swing.GroupLayout.PREFERRED_SIZE, 220, javax.swing.GroupLayout.PREFERRED_SIZE)
388                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
389                         .addComponent(jScrollPane8, javax.swing.GroupLayout.PREFERRED_SIZE, 189, javax.swing.GroupLayout.PREFERRED_SIZE)))
390                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
391                 .addComponent(jScrollPane6, javax.swing.GroupLayout.DEFAULT_SIZE, 292, Short.MAX_VALUE))
392         );
393         jPanel1Layout.setVerticalGroup(
394             jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
395             .addGroup(jPanel1Layout.createSequentialGroup()
396                 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
397                     .addComponent(userImageLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 48, javax.swing.GroupLayout.PREFERRED_SIZE)
398                     .addComponent(jScrollPane5, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE))
399                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
400                 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
401                     .addGroup(jPanel1Layout.createSequentialGroup()
402                         .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
403                             .addGroup(jPanel1Layout.createSequentialGroup()
404                                 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
405                                     .addComponent(jLabel3)
406                                     .addComponent(userNameLabel))
407                                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
408                                 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
409                                     .addComponent(jLabel4)
410                                     .addComponent(updateTimeLabel))
411                                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
412                                 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
413                                     .addComponent(jLabel5)
414                                     .addComponent(locationLabel)))
415                             .addGroup(jPanel1Layout.createSequentialGroup()
416                                 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
417                                     .addComponent(jLabel9)
418                                     .addComponent(followingLabel))
419                                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
420                                 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
421                                     .addComponent(jLabel12)
422                                     .addComponent(followerLabel))
423                                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
424                                 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
425                                     .addComponent(jLabel13)
426                                     .addComponent(updateLabel))))
427                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
428                         .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
429                             .addComponent(jScrollPane8, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
430                             .addComponent(jScrollPane7, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)))
431                     .addComponent(jScrollPane6, javax.swing.GroupLayout.PREFERRED_SIZE, 85, javax.swing.GroupLayout.PREFERRED_SIZE))
432                 .addContainerGap())
433         );
434
435         jButton1.setText("今すぐ更新");
436         jButton1.addActionListener(new java.awt.event.ActionListener() {
437             public void actionPerformed(java.awt.event.ActionEvent evt) {
438                 jButton1ActionPerformed(evt);
439             }
440         });
441
442         jButton2.setText("リフレッシュ");
443         jButton2.addActionListener(new java.awt.event.ActionListener() {
444             public void actionPerformed(java.awt.event.ActionEvent evt) {
445                 jButton2ActionPerformed(evt);
446             }
447         });
448
449         jScrollPane9.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
450         jScrollPane9.setMaximumSize(new java.awt.Dimension(32767, 80));
451         jScrollPane9.setMinimumSize(new java.awt.Dimension(26, 80));
452
453         jTextPane.setMaximumSize(new java.awt.Dimension(2147483647, 20));
454         jTextPane.addFocusListener(new java.awt.event.FocusAdapter() {
455             public void focusGained(java.awt.event.FocusEvent evt) {
456                 jTextPaneFocusGained(evt);
457             }
458             public void focusLost(java.awt.event.FocusEvent evt) {
459                 jTextPaneFocusLost(evt);
460             }
461         });
462         jTextPane.addKeyListener(new java.awt.event.KeyAdapter() {
463             public void keyReleased(java.awt.event.KeyEvent evt) {
464                 jTextPaneKeyReleased(evt);
465             }
466         });
467         jScrollPane9.setViewportView(jTextPane);
468
469         jLabel15.setText("残り文字数");
470
471         tweetLengthLabel.setText("140");
472
473         jButton4.setText("つぶやく");
474         jButton4.addActionListener(new java.awt.event.ActionListener() {
475             public void actionPerformed(java.awt.event.ActionEvent evt) {
476                 jButton4ActionPerformed(evt);
477             }
478         });
479
480         jToggleButton1.setSelected(true);
481         jToggleButton1.setText("詳細情報");
482         jToggleButton1.setMaximumSize(new java.awt.Dimension(73, 26));
483         jToggleButton1.setMinimumSize(new java.awt.Dimension(73, 26));
484         jToggleButton1.addActionListener(new java.awt.event.ActionListener() {
485             public void actionPerformed(java.awt.event.ActionEvent evt) {
486                 jToggleButton1ActionPerformed(evt);
487             }
488         });
489
490         statusBar.setText("Status");
491         statusBar.setBorder(javax.swing.BorderFactory.createEtchedBorder());
492
493         jToggleButton2.setSelected(true);
494         jToggleButton2.setText("書き込み欄");
495         jToggleButton2.setMaximumSize(new java.awt.Dimension(73, 26));
496         jToggleButton2.setMinimumSize(new java.awt.Dimension(73, 26));
497         jToggleButton2.addActionListener(new java.awt.event.ActionListener() {
498             public void actionPerformed(java.awt.event.ActionEvent evt) {
499                 jToggleButton2ActionPerformed(evt);
500             }
501         });
502
503         jMenu1.setText("ファイル");
504
505         jMenuItem1.setText("終了");
506         jMenuItem1.addActionListener(new java.awt.event.ActionListener() {
507             public void actionPerformed(java.awt.event.ActionEvent evt) {
508                 jMenuItem1ActionPerformed(evt);
509             }
510         });
511         jMenu1.add(jMenuItem1);
512
513         jMenuBar1.add(jMenu1);
514
515         jMenu4.setText("タブ");
516
517         jMenuItem5.setText("Debug");
518         jMenuItem5.addActionListener(new java.awt.event.ActionListener() {
519             public void actionPerformed(java.awt.event.ActionEvent evt) {
520                 jMenuItem5ActionPerformed(evt);
521             }
522         });
523         jMenu4.add(jMenuItem5);
524
525         jMenuBar1.add(jMenu4);
526
527         jMenu5.setText("検索");
528
529         jMenuItem6.setText("キーワードでTwitter全体を検索");
530         jMenuItem6.addActionListener(new java.awt.event.ActionListener() {
531             public void actionPerformed(java.awt.event.ActionEvent evt) {
532                 jMenuItem6ActionPerformed(evt);
533             }
534         });
535         jMenu5.add(jMenuItem6);
536
537         jMenuBar1.add(jMenu5);
538
539         jMenu2.setText("設定");
540
541         jMenuItem2.setText("基本設定");
542         jMenuItem2.addActionListener(new java.awt.event.ActionListener() {
543             public void actionPerformed(java.awt.event.ActionEvent evt) {
544                 jMenuItem2ActionPerformed(evt);
545             }
546         });
547         jMenu2.add(jMenuItem2);
548
549         jMenuItem4.setText("アカウント設定");
550         jMenuItem4.addActionListener(new java.awt.event.ActionListener() {
551             public void actionPerformed(java.awt.event.ActionEvent evt) {
552                 jMenuItem4ActionPerformed(evt);
553             }
554         });
555         jMenu2.add(jMenuItem4);
556
557         jMenuBar1.add(jMenu2);
558
559         jMenu3.setText("ヘルプ");
560
561         jMenuItem3.setText("このプログラムについて");
562         jMenuItem3.addActionListener(new java.awt.event.ActionListener() {
563             public void actionPerformed(java.awt.event.ActionEvent evt) {
564                 jMenuItem3ActionPerformed(evt);
565             }
566         });
567         jMenu3.add(jMenuItem3);
568
569         jMenuBar1.add(jMenu3);
570
571         setJMenuBar(jMenuBar1);
572
573         javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
574         getContentPane().setLayout(layout);
575         layout.setHorizontalGroup(
576             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
577             .addComponent(jTabbedPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 729, Short.MAX_VALUE)
578             .addComponent(jPanel1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
579             .addGroup(layout.createSequentialGroup()
580                 .addContainerGap()
581                 .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 115, javax.swing.GroupLayout.PREFERRED_SIZE)
582                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
583                 .addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 112, javax.swing.GroupLayout.PREFERRED_SIZE)
584                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
585                 .addComponent(jToggleButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 109, javax.swing.GroupLayout.PREFERRED_SIZE)
586                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
587                 .addComponent(jToggleButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE)
588                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 30, Short.MAX_VALUE)
589                 .addComponent(jLabel15)
590                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
591                 .addComponent(tweetLengthLabel)
592                 .addGap(18, 18, 18)
593                 .addComponent(jButton4, javax.swing.GroupLayout.PREFERRED_SIZE, 101, javax.swing.GroupLayout.PREFERRED_SIZE)
594                 .addContainerGap())
595             .addComponent(statusBar, javax.swing.GroupLayout.DEFAULT_SIZE, 729, Short.MAX_VALUE)
596             .addComponent(jScrollPane9, javax.swing.GroupLayout.DEFAULT_SIZE, 729, Short.MAX_VALUE)
597         );
598         layout.setVerticalGroup(
599             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
600             .addGroup(layout.createSequentialGroup()
601                 .addComponent(jTabbedPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 281, Short.MAX_VALUE)
602                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
603                 .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
604                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
605                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
606                     .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
607                         .addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, 34, Short.MAX_VALUE)
608                         .addComponent(jButton2, javax.swing.GroupLayout.DEFAULT_SIZE, 34, Short.MAX_VALUE))
609                     .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
610                         .addComponent(jLabel15)
611                         .addComponent(tweetLengthLabel)
612                         .addComponent(jButton4, javax.swing.GroupLayout.DEFAULT_SIZE, 34, Short.MAX_VALUE)
613                         .addComponent(jToggleButton1, javax.swing.GroupLayout.DEFAULT_SIZE, 34, Short.MAX_VALUE)
614                         .addComponent(jToggleButton2, javax.swing.GroupLayout.DEFAULT_SIZE, 34, Short.MAX_VALUE)))
615                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
616                 .addComponent(jScrollPane9, javax.swing.GroupLayout.PREFERRED_SIZE, 58, javax.swing.GroupLayout.PREFERRED_SIZE)
617                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
618                 .addComponent(statusBar, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE))
619         );
620
621         pack();
622     }// </editor-fold>//GEN-END:initComponents
623
624     private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton4ActionPerformed
625         // メッセージをつぶやく
626         mainAction.actionTweet();
627         updateLen();
628     }//GEN-LAST:event_jButton4ActionPerformed
629
630     private void jTableFocusGained(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTableFocusGained
631         // まだ見ていないtweet数を0にする
632         mainAction.actionResetUncheckedTimelineTweetCount();
633     }//GEN-LAST:event_jTableFocusGained
634
635     private void jTableMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jTableMousePressed
636         //右クリックメニュー表示
637         showPopup(evt);
638         mainAction.actionResetUncheckedTimelineTweetCount();
639     }//GEN-LAST:event_jTableMousePressed
640
641     private void jTableMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jTableMouseReleased
642         //右クリックメニュー表示
643         showPopup(evt);
644     }//GEN-LAST:event_jTableMouseReleased
645
646     private void jTable1FocusGained(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTable1FocusGained
647         mainAction.actionResetUncheckedMentionTweetCount();
648     }//GEN-LAST:event_jTable1FocusGained
649
650     private void jTable1MousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jTable1MousePressed
651         //右クリックメニュー表示
652         showPopup(evt);
653         mainAction.actionResetUncheckedMentionTweetCount();
654     }//GEN-LAST:event_jTable1MousePressed
655
656     private void jTable1MouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jTable1MouseReleased
657         //右クリックメニュー表示
658         showPopup(evt);
659     }//GEN-LAST:event_jTable1MouseReleased
660
661     private void jTable2FocusGained(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTable2FocusGained
662         mainAction.actionResetUncheckedDirectMessageCount();
663     }//GEN-LAST:event_jTable2FocusGained
664
665     private void jTable2MousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jTable2MousePressed
666         //右クリックメニュー表示
667         showPopup(evt);
668         mainAction.actionResetUncheckedDirectMessageCount();
669     }//GEN-LAST:event_jTable2MousePressed
670
671     private void jTable2MouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jTable2MouseReleased
672         //右クリックメニュー表示
673         showPopup(evt);
674     }//GEN-LAST:event_jTable2MouseReleased
675
676     private void tweetMessageBoxComponentResized(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_tweetMessageBoxComponentResized
677     }//GEN-LAST:event_tweetMessageBoxComponentResized
678
679     private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
680         mainAction.actionUpdateButton(evt);
681         // いますぐ更新ボタンを押したので,更新タイムを一度リセットする
682         mainAction.resetTweetAutoUpdate();
683     }//GEN-LAST:event_jButton1ActionPerformed
684
685     private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed
686         // tweet取得時間情報を更新
687         mainAction.actionRefreshTime();
688     }//GEN-LAST:event_jButton2ActionPerformed
689
690     private void jToggleButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jToggleButton1ActionPerformed
691         // 詳細情報ボタンを押した時の動作
692         mainAction.actionDetailInfoButton(evt);
693     }//GEN-LAST:event_jToggleButton1ActionPerformed
694
695     private void jTextPaneKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jTextPaneKeyReleased
696         // 残りつぶやける文字数情報を更新
697         mainAction.actionUpdateTweetMessageCount();
698     }//GEN-LAST:event_jTextPaneKeyReleased
699
700     private void jTextPaneFocusGained(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextPaneFocusGained
701         updateLen();
702     }//GEN-LAST:event_jTextPaneFocusGained
703
704     private void jTextPaneFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextPaneFocusLost
705         updateLen();
706     }//GEN-LAST:event_jTextPaneFocusLost
707
708     private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem1ActionPerformed
709         // 終了動作
710         mainAction.actionExitButton(evt);
711     }//GEN-LAST:event_jMenuItem1ActionPerformed
712
713     private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem2ActionPerformed
714         // 基本設定ダイアログを開く
715         mainAction.actionBasicSettingDialog();
716     }//GEN-LAST:event_jMenuItem2ActionPerformed
717
718     private void jMenuItem3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem3ActionPerformed
719         mainAction.actionShowAboutDialog();
720     }//GEN-LAST:event_jMenuItem3ActionPerformed
721
722     private void jMenuItem4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem4ActionPerformed
723         mainAction.actionShowAccountDialog();
724     }//GEN-LAST:event_jMenuItem4ActionPerformed
725
726     private void jToggleButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jToggleButton2ActionPerformed
727         mainAction.actionShowTweetboxButton(evt);
728         this.invalidate();
729         this.validate();
730     }//GEN-LAST:event_jToggleButton2ActionPerformed
731
732     private void jMenuItem5ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem5ActionPerformed
733         this.mainAction.actionAddNewSearchResultTab("#followme");
734     }//GEN-LAST:event_jMenuItem5ActionPerformed
735
736     private void jMenuItem6ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem6ActionPerformed
737         this.mainAction.actionShowKeywordSearchDialog();
738     }//GEN-LAST:event_jMenuItem6ActionPerformed
739
740     /**
741      *
742      */
743     private void updateLen() {
744         // 残りつぶやける文字数情報を更新
745         mainAction.actionUpdateTweetMessageCount();
746     }
747
748     /**
749      * ポップアップメニューを作成
750      * @param e
751      */
752     private void showPopup(MouseEvent e) {
753         if (e.isPopupTrigger()) {
754             // 右クリックのメニューを表示
755             getRightClickPopup().show(e.getComponent(), e.getX(),
756                     e.getY());
757         }
758     }
759
760     /**
761      * @param args the command line arguments
762      */
763     public static void main(String args[]) {
764         java.awt.EventQueue.invokeLater(new Runnable() {
765
766             @Override
767             public void run() {
768                 try {
769                     // UIをシステム標準のものとする
770                     UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
771
772                 } catch (Exception e) {
773                     e.printStackTrace();
774                 }
775                 new NishioTweetManager().setVisible(true);
776             }
777         });
778     }
779
780     /**
781      * Twitter初期化
782      */
783     private void init() {
784         // twitterログイン
785         boolean login = false;
786         try {
787             tweetManager.loginTwitter();
788             login = true;
789         } catch (Exception e) {
790             e.printStackTrace();
791         }
792
793         // メインアクション初期化
794         mainAction = new TweetMainAction(this, tweetManager, statusBar,
795                 tweetTableModel, mentionTableModel, messageTableModel,
796                 sendMessageTableModel, jTable, jTable1, jTable2, jTable3,
797                 jTextPane, jScrollPane9, tweetLengthLabel, jPanel1, jTabbedPane1, tweetMessageBox, userImageLabel,
798                 userNameLabel, updateTimeLabel, followerLabel, followingLabel, locationLabel,
799                 clientNameLabel, updateLabel, userIntroBox, userWebBox);
800         // 自動更新開始
801         mainAction.startTweetAutoUpdate();
802         //もしログインに失敗したら,アカウント設定画面を出す
803         if (login == false) {
804             mainAction.actionShowAccountDialog();
805         }
806         //テーブル生成
807         createTweetTable(jTable);
808         createTweetTable(jTable1);
809         createTweetTable(jTable2);
810         createTweetTable(jTable3);
811     }
812
813     /**
814      * Tweetを表示するテーブルを作成
815      *
816      * @param model
817      * @return
818      */
819     private void createTweetTable(final JTable table) {
820
821         table.setAutoResizeMode(JTable.AUTO_RESIZE_NEXT_COLUMN);
822         table.setShowVerticalLines(false);
823         table.setShowHorizontalLines(true);
824
825         // Comment部分のColumnを複数行コメントが表示できるようにする
826         TableColumnModel mdl = table.getColumnModel();
827         TableColumn col = mdl.getColumn(1);
828         TweetCommentRenderer commentRenderer = new TweetCommentRenderer();
829         col.setCellRenderer(commentRenderer);
830         // INfo部分のColumnを複数行表示できるように
831         TweetCommentRenderer infoRenderer = new TweetCommentRenderer();
832         col = mdl.getColumn(2);
833         col.setCellRenderer(infoRenderer);
834         col.setMaxWidth(200);
835         col.setMinWidth(150);
836         // TODO:とりあえず幅指定した部分
837         // あとでファイルに幅情報などを保存しておき,それを読み込んで設定するような仕様に変更する
838         // ユーザImageを表示する部分
839         col = mdl.getColumn(0);
840         col.setCellRenderer(new UserImageRenderer());
841         col.setMinWidth(50);
842         col.setMaxWidth(50);
843         // 選択したセルの情報をDetailInfoへと表示
844         table.getSelectionModel().addListSelectionListener(
845                 new ListSelectionListener() {
846
847                     @Override
848                     public void valueChanged(ListSelectionEvent e) {
849
850                         if (e.getValueIsAdjusting()) {
851                             return;
852                         }
853
854                         //テーブルで選択した要素を詳細情報として表示
855                         mainAction.setDetailInformationFromTable(table);
856                     }
857                 });
858         // JTableを右クリックでも選択できるようにする
859         // また,同じ行を2回クリックできるようにする
860         table.addMouseListener(new MouseAdapter() {
861
862             @Override
863             public void mousePressed(MouseEvent e) {
864                 // いったんSelectしていた情報を削除
865                 table.clearSelection();
866                 // if (e.getButton() == MouseEvent.BUTTON3) {
867                 Point p = e.getPoint();
868                 int col = table.columnAtPoint(p);
869                 int row = table.rowAtPoint(p);
870                 table.changeSelection(row, col, false, false);
871                 // }
872             }
873         });
874         // MouseEventを追加
875         table.addMouseListener(commentRenderer);
876         table.addMouseMotionListener(commentRenderer);
877         table.addMouseListener(infoRenderer);
878         table.addMouseMotionListener(infoRenderer);
879     }
880
881     /**
882      * 右クリックを押した時のポップアップメニューを取得
883      *
884      * @return
885      */
886     private JPopupMenu getRightClickPopup() {
887         if (rightClickPopup == null) {
888             rightClickPopup = new JPopupMenu();
889             JMenuItem directMessageMenuItem = new JMenuItem("ダイレクトメッセージを送信");
890             directMessageMenuItem.addActionListener(new java.awt.event.ActionListener() {
891
892                 public void actionPerformed(java.awt.event.ActionEvent e) {
893                     // ダイレクトメッセージ送信ダイアログを表示
894                     mainAction.actionShowDirectMessageDialog();
895                 }
896             });
897             rightClickPopup.add(directMessageMenuItem);
898             JMenuItem retweetMenuItem = new JMenuItem("発言を公式リツイート");
899             retweetMenuItem.addActionListener(new java.awt.event.ActionListener() {
900
901                 public void actionPerformed(java.awt.event.ActionEvent e) {
902                     // 選択したセルのステータスをRetweet
903                     mainAction.actionRetweet();
904                 }
905             });
906             rightClickPopup.add(retweetMenuItem);
907             JMenuItem quoteMenuItem = new JMenuItem("発言をコメント付きリツイート");
908             quoteMenuItem.addActionListener(new java.awt.event.ActionListener() {
909
910                 public void actionPerformed(java.awt.event.ActionEvent e) {
911                     // 選択したセルのステータスをコメント付Retweet
912                     mainAction.actionCopySelectedStatusToTweetBoxPane();
913                 }
914             });
915             rightClickPopup.add(quoteMenuItem);
916
917             JMenuItem statusBrowserMenuItem = new JMenuItem("発言をブラウザで開く");
918             statusBrowserMenuItem.addActionListener(new java.awt.event.ActionListener() {
919
920                 public void actionPerformed(java.awt.event.ActionEvent e) {
921                     // 選択したセルのステータスをブラウザで開く
922                     mainAction.actionOpenStatusURL();
923                 }
924             });
925             rightClickPopup.add(statusBrowserMenuItem);
926
927             JMenuItem openBrowserUserInformationMenuItem = new JMenuItem(
928                     "この人のTimelineをブラウザで開く");
929             openBrowserUserInformationMenuItem.addActionListener(new java.awt.event.ActionListener() {
930
931                 public void actionPerformed(java.awt.event.ActionEvent e) {
932                     // 選択したセルのユーザ情報をブラウザで開く
933                     mainAction.actionOpenUserURL();
934                 }
935             });
936             rightClickPopup.add(openBrowserUserInformationMenuItem);
937         }
938         return rightClickPopup;
939     }
940     //nishio tweet manager
941     private JPopupMenu rightClickPopup = null;
942     private TweetMainAction mainAction = null;
943     // TweetManager
944     private TweetManager tweetManager = new TweetManager();
945     //TableModel
946     private TweetTableModel tweetTableModel = new TweetTableModel();
947     private TweetTableModel mentionTableModel = new TweetTableModel();
948     private TweetTableModel messageTableModel = new TweetTableModel();
949     private TweetTableModel sendMessageTableModel = new TweetTableModel();
950     // Variables declaration - do not modify//GEN-BEGIN:variables
951     private javax.swing.JEditorPane clientNameLabel;
952     private javax.swing.JLabel followerLabel;
953     private javax.swing.JLabel followingLabel;
954     private javax.swing.JButton jButton1;
955     private javax.swing.JButton jButton2;
956     private javax.swing.JButton jButton4;
957     private javax.swing.JLabel jLabel12;
958     private javax.swing.JLabel jLabel13;
959     private javax.swing.JLabel jLabel15;
960     private javax.swing.JLabel jLabel3;
961     private javax.swing.JLabel jLabel4;
962     private javax.swing.JLabel jLabel5;
963     private javax.swing.JLabel jLabel9;
964     private javax.swing.JMenu jMenu1;
965     private javax.swing.JMenu jMenu2;
966     private javax.swing.JMenu jMenu3;
967     private javax.swing.JMenu jMenu4;
968     private javax.swing.JMenu jMenu5;
969     private javax.swing.JMenuBar jMenuBar1;
970     private javax.swing.JMenuItem jMenuItem1;
971     private javax.swing.JMenuItem jMenuItem2;
972     private javax.swing.JMenuItem jMenuItem3;
973     private javax.swing.JMenuItem jMenuItem4;
974     private javax.swing.JMenuItem jMenuItem5;
975     private javax.swing.JMenuItem jMenuItem6;
976     private javax.swing.JPanel jPanel1;
977     private javax.swing.JScrollPane jScrollPane1;
978     private javax.swing.JScrollPane jScrollPane2;
979     private javax.swing.JScrollPane jScrollPane3;
980     private javax.swing.JScrollPane jScrollPane4;
981     private javax.swing.JScrollPane jScrollPane5;
982     private javax.swing.JScrollPane jScrollPane6;
983     private javax.swing.JScrollPane jScrollPane7;
984     private javax.swing.JScrollPane jScrollPane8;
985     private javax.swing.JScrollPane jScrollPane9;
986     private javax.swing.JTabbedPane jTabbedPane1;
987     private javax.swing.JTable jTable;
988     private javax.swing.JTable jTable1;
989     private javax.swing.JTable jTable2;
990     private javax.swing.JTable jTable3;
991     private javax.swing.JTextPane jTextPane;
992     private javax.swing.JToggleButton jToggleButton1;
993     private javax.swing.JToggleButton jToggleButton2;
994     private javax.swing.JLabel locationLabel;
995     private javax.swing.JLabel statusBar;
996     private javax.swing.JLabel tweetLengthLabel;
997     private javax.swing.JEditorPane tweetMessageBox;
998     private javax.swing.JLabel updateLabel;
999     private javax.swing.JLabel updateTimeLabel;
1000     private javax.swing.JLabel userImageLabel;
1001     private javax.swing.JEditorPane userIntroBox;
1002     private javax.swing.JLabel userNameLabel;
1003     private javax.swing.JEditorPane userWebBox;
1004     // End of variables declaration//GEN-END:variables
1005 }