import java.net.URI;
import java.net.URL;
import java.net.URLEncoder;
+import java.text.DateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import javax.swing.ImageIcon;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
private TweetTableModel tweetTableModel = null;
private int uncheckedDirectMessageCount = 0;
private int uncheckedMentionTweetCount = 0;
+
+ //Tweetの詳細情報を表示する部分
+ private JLabel userImageLabel = null;
+ private JLabel userNameLabel = null;
+ private JLabel updateTimeLabel = null;
+ private JLabel followerLabel = null;
+ private JLabel followingLabel = null;
+ private JLabel locationLabel = null;
+ private JEditorPane clientNameLabel = null;
+ private JLabel updateLabel = null;
+ private JEditorPane userIntroBox = null;
+ private JEditorPane userWebBox = null;
+
// 新しく取得したtweetでまだ参照していない数
private int uncheckedTimelineTweetCount = 0;
private AboutDialog aboutDialog = null;
/**
*
+ * @param mainFrame
+ * @param tweetManager
* @param statusBarLabel
+ * @param tweetTableModel
+ * @param mentionTableModel
+ * @param directMessageTableModel
+ * @param sendDirectMessageTableModel
+ * @param mainTweetTable
+ * @param mentionTable
+ * @param directMessageTable
+ * @param sendDirectMessageTable
+ * @param tweetBoxPane
+ * @param tweetBoxScrollPane
+ * @param tweetMessageCountLabel
+ * @param detailInfoPanel
+ * @param tweetMainTab
+ * @param tweetMessageBox
+ * @param userImageLabel
+ * @param userNameLabel
+ * @param updateTimeLabel
+ * @param followerLabel
+ * @param followingLabel
+ * @param locationLabel
+ * @param clientNameLabel
+ * @param updateLabel
+ * @param userIntroBox
+ * @param userWebBox
*/
- public TweetMainAction(JFrame mainFrame, TweetManager tweetManager,
- JLabel statusBarLabel, TweetTableModel tweetTableModel,
+ public TweetMainAction(JFrame mainFrame,
+ TweetManager tweetManager,
+ JLabel statusBarLabel,
+ TweetTableModel tweetTableModel,
TweetTableModel mentionTableModel,
TweetTableModel directMessageTableModel,
- TweetTableModel sendDirectMessageTableModel, JTable mainTweetTable,
- JTable mentionTable, JTable directMessageTable,
- JTable sendDirectMessageTable, JTextPane tweetBoxPane, JScrollPane tweetBoxScrollPane,
- JLabel tweetMessageCountLabel, JPanel detailInfoPanel,
- JTabbedPane tweetMainTab, JEditorPane tweetMessageBox) {
+ TweetTableModel sendDirectMessageTableModel,
+ JTable mainTweetTable,
+ JTable mentionTable,
+ JTable directMessageTable,
+ JTable sendDirectMessageTable,
+ JTextPane tweetBoxPane,
+ JScrollPane tweetBoxScrollPane,
+ JLabel tweetMessageCountLabel,
+ JPanel detailInfoPanel,
+ JTabbedPane tweetMainTab,
+ JEditorPane tweetMessageBox,
+ JLabel userImageLabel,
+ JLabel userNameLabel,
+ JLabel updateTimeLabel,
+ JLabel followerLabel,
+ JLabel followingLabel,
+ JLabel locationLabel,
+ JEditorPane clientNameLabel,
+ JLabel updateLabel,
+ JEditorPane userIntroBox,
+ JEditorPane userWebBox) {
this.mainFrame = mainFrame;
this.tweetManager = tweetManager;
this.statusBarLabel = statusBarLabel;
this.tweetMessageBox = tweetMessageBox;
this.tweetBoxScrollPane = tweetBoxScrollPane;
+ //詳細情報部分
+ this.userImageLabel = userImageLabel;
+ this.userNameLabel = userNameLabel;
+ this.updateTimeLabel = updateTimeLabel;
+ this.userIntroBox = userIntroBox;
+ this.followerLabel = followerLabel;
+ this.followingLabel = followingLabel;
+ this.locationLabel = locationLabel;
+ this.userWebBox = userWebBox;
+ this.clientNameLabel = clientNameLabel;
+ this.updateLabel = updateLabel;
+
// 設定ファイルの読み込み
try {
loadProperties();
return directMessageDialog;
}
+ /**
+ * テーブルで選択したツイートを詳細情報としてセット
+ * @param table
+ */
+ public void setDetailInformationFromTable(JTable table) {
+ int sc = table.getSelectedRowCount();
+ String infoMessage = "";
+
+ if (sc == 1) {
+ Status st = getTweetTableInformation(table, table.getModel());
+ infoMessage = st.getText();
+ // tweetMessageBox内のURLをhtmlリンクへ変換
+ infoMessage = actionReplaceTweetMessageBoxURLLink(infoMessage);
+ // @ユーザ情報をhtmlリンクへ変換
+ infoMessage = actionReplaceTweetMessageBoxUserInfo(infoMessage);
+ // #ハッシュタグ情報をhtmlリンクへ変換
+ infoMessage = actionReplaceTweetMessageBoxHashTab(infoMessage);
+ // 詳細情報にテーブルで選択した人のツイート情報を表示
+ tweetMessageBox.setText(infoMessage);
+ // user icon
+ userImageLabel.setIcon(new ImageIcon(st.getUser().getProfileImageURL()));
+ // user name and id
+ userNameLabel.setText(st.getUser().getName()
+ + " / " + st.getUser().getScreenName());
+ // update Time
+ updateTimeLabel.setText(DateFormat.getInstance().format( st.getCreatedAt() ));
+ // ユーザ自己紹介文
+ userIntroBox.setText(st.getUser().getDescription());
+ // フォローされている数
+ followerLabel.setText(st.getUser().getFollowersCount()
+ + "");
+ // フォローしている数
+ followingLabel.setText(st.getUser().getFriendsCount()
+ + "");
+ // 現在地
+ locationLabel.setText(st.getUser().getLocation());
+ // Web
+ if (st.getUser().getURL() != null) {
+ userWebBox.setText("<a href=\""
+ + st.getUser().getURL() + "\">"
+ + st.getUser().getScreenName()
+ + "のWebを開く" + "</a>");
+ } else {
+ userWebBox.setText("");
+ }
+ // client
+ clientNameLabel.setText(" via " + st.getSource());
+ // Update
+ updateLabel.setText(st.getUser().getStatusesCount()
+ + "");
+ }
+ }
+
+ /**
+ *
+ * @return
+ */
public AboutDialog getAboutDialog() {
if (aboutDialog == null) {
aboutDialog = new AboutDialog(mainFrame, true);
package twitter.gui.component;
import java.awt.Color;
+import java.awt.Point;
+import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.List;
import javax.swing.JMenuItem;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
import javax.swing.table.TableCellRenderer;
+import javax.swing.table.TableColumn;
+import javax.swing.table.TableColumnModel;
import twitter.action.TweetGetter;
import twitter.gui.action.TweetMainAction;
import twitter.manage.TweetManager;
model = new TweetTableModel();
uncheckedTweet = 0;
scrollPane = new JScrollPane();
-
+
//テーブルをタブに追加
table.setModel(model);
table.getTableHeader().setReorderingAllowed(false);
}
});
+ //tweetを表示するテーブルを作成
+ createTweetTable(table);
+
//スクロールペーン追加
scrollPane.setViewportView(table);
//タブにテーブル追加
}
/**
+ * Tweetを表示するテーブルを作成
+ *
+ * @param model
+ * @return
+ */
+ private void createTweetTable(final JTable table) {
+
+ table.setAutoResizeMode(JTable.AUTO_RESIZE_NEXT_COLUMN);
+ table.setShowVerticalLines(false);
+ table.setShowHorizontalLines(true);
+
+ // Comment部分のColumnを複数行コメントが表示できるようにする
+ TableColumnModel mdl = table.getColumnModel();
+ TableColumn col = mdl.getColumn(1);
+ TweetCommentRenderer commentRenderer = new TweetCommentRenderer();
+ col.setCellRenderer(commentRenderer);
+ // INfo部分のColumnを複数行表示できるように
+ TweetCommentRenderer infoRenderer = new TweetCommentRenderer();
+ col = mdl.getColumn(2);
+ col.setCellRenderer(infoRenderer);
+ col.setMaxWidth(200);
+ col.setMinWidth(150);
+ // TODO:とりあえず幅指定した部分
+ // あとでファイルに幅情報などを保存しておき,それを読み込んで設定するような仕様に変更する
+ // ユーザImageを表示する部分
+ col = mdl.getColumn(0);
+ col.setCellRenderer(new UserImageRenderer());
+ col.setMinWidth(50);
+ col.setMaxWidth(50);
+ // 選択したセルの情報をDetailInfoへと表示
+ table.getSelectionModel().addListSelectionListener(
+ new ListSelectionListener() {
+
+ @Override
+ public void valueChanged(ListSelectionEvent e) {
+
+ if (e.getValueIsAdjusting()) {
+ return;
+ }
+
+ //テーブルで選択した要素を詳細情報として表示
+ mainAction.setDetailInformationFromTable(table);
+ }
+ });
+ // JTableを右クリックでも選択できるようにする
+ // また,同じ行を2回クリックできるようにする
+ table.addMouseListener(new MouseAdapter() {
+
+ @Override
+ public void mousePressed(MouseEvent e) {
+ // いったんSelectしていた情報を削除
+ table.clearSelection();
+ // if (e.getButton() == MouseEvent.BUTTON3) {
+ Point p = e.getPoint();
+ int col = table.columnAtPoint(p);
+ int row = table.rowAtPoint(p);
+ table.changeSelection(row, col, false, false);
+ // }
+ }
+ });
+ // MouseEventを追加
+ table.addMouseListener(commentRenderer);
+ table.addMouseMotionListener(commentRenderer);
+ table.addMouseListener(infoRenderer);
+ table.addMouseMotionListener(infoRenderer);
+ }
+
+ /**
* テーブル情報更新
*/
public void updateTweetTable() {
private void jTableMousePressed(java.awt.event.MouseEvent evt) {
//右クリックメニュー表示
showPopup(evt);
+ //TODO: ここを修正
mainAction.actionResetUncheckedTimelineTweetCount();
}
mainAction = new TweetMainAction(this, tweetManager, statusBar,
tweetTableModel, mentionTableModel, messageTableModel,
sendMessageTableModel, jTable, jTable1, jTable2, jTable3,
- jTextPane, jScrollPane9, tweetLengthLabel, jPanel1, jTabbedPane1, tweetMessageBox);
+ jTextPane, jScrollPane9, tweetLengthLabel, jPanel1, jTabbedPane1, tweetMessageBox, userImageLabel,
+ userNameLabel, updateTimeLabel, followerLabel, followingLabel, locationLabel,
+ clientNameLabel, updateLabel, userIntroBox, userWebBox);
// 自動更新開始
mainAction.startTweetAutoUpdate();
//もしログインに失敗したら,アカウント設定画面を出す
return;
}
- int sc = table.getSelectedRowCount();
- String infoMessage = "";
- if (sc == 1) {
- Status st = mainAction.getTweetTableInformation(
- table, table.getModel());
- infoMessage = st.getText();
- // tweetMessageBox内のURLをhtmlリンクへ変換
- infoMessage = mainAction.actionReplaceTweetMessageBoxURLLink(infoMessage);
- // @ユーザ情報をhtmlリンクへ変換
- infoMessage = mainAction.actionReplaceTweetMessageBoxUserInfo(infoMessage);
- // #ハッシュタグ情報をhtmlリンクへ変換
- infoMessage = mainAction.actionReplaceTweetMessageBoxHashTab(infoMessage);
- // 詳細情報にテーブルで選択した人のツイート情報を表示
- tweetMessageBox.setText(infoMessage);
- // user icon
- userImageLabel.setIcon(new ImageIcon(st.getUser().getProfileImageURL()));
- // user name and id
- userNameLabel.setText(st.getUser().getName()
- + " / " + st.getUser().getScreenName());
- // update Time
- updateTimeLabel.setText(st.getCreatedAt().toLocaleString());
- // ユーザのバックグラウンドイメージを取得
- /*
- * ImagePanel imagePanel = null; if( jContentPane
- * instanceof ImagePanel ) { imagePanel =
- * (ImagePanel)jContentPane; try { URL url = new URL
- * ( st.getUser().getProfileBackgroundImageUrl() );
- * imagePanel.setImage( new ImageIcon( url
- * ).getImage() ); } catch (MalformedURLException
- * e1) { e1.printStackTrace(); } }
- */
- // ユーザ自己紹介文
- userIntroBox.setText(st.getUser().getDescription());
- // フォローされている数
- followerLabel.setText(st.getUser().getFollowersCount()
- + "");
- // フォローしている数
- followingLabel.setText(st.getUser().getFriendsCount()
- + "");
- // 現在地
- locationLabel.setText(st.getUser().getLocation());
- // Web
- if (st.getUser().getURL() != null) {
- userWebBox.setText("<a href=\""
- + st.getUser().getURL() + "\">"
- + st.getUser().getScreenName()
- + "のWebを開く" + "</a>");
- } else {
- userWebBox.setText("");
- }
- // client
- clientNameLabel.setText(" via " + st.getSource());
- // Update
- updateLabel.setText(st.getUser().getStatusesCount()
- + "");
- }
+ //テーブルで選択した要素を詳細情報として表示
+ mainAction.setDetailInformationFromTable(table);
}
});
// JTableを右クリックでも選択できるようにする