2 * To change this template, choose Tools | Templates
3 * and open the template in the editor.
9 * Created on 2010/10/17, 16:55:08
12 package twitter.gui.form;
14 import java.awt.Point;
15 import java.awt.event.KeyAdapter;
16 import java.awt.event.KeyEvent;
17 import java.awt.event.MouseAdapter;
18 import java.awt.event.MouseEvent;
19 import java.util.List;
20 import javax.swing.ImageIcon;
21 import javax.swing.JOptionPane;
22 import javax.swing.JTable;
23 import javax.swing.table.TableColumn;
24 import javax.swing.table.TableColumnModel;
25 import javax.swing.table.TableModel;
26 import twitter.action.TweetUserTimelineGetter;
27 import twitter.action.list.UserListGetter;
28 import twitter.gui.action.TweetMainAction;
29 import twitter.gui.component.TweetListTableModel;
30 import twitter.manage.TweetManager;
31 import twitter4j.UserList;
37 public class UserListDialog extends javax.swing.JDialog {
40 private TweetMainAction mainAction = null;
42 private UserListGetter userListGetter = null;
44 private String listUserName = null;
46 private TweetListTableModel listTableModel = new TweetListTableModel();
48 private static final int iconSize = 50;
50 /** Creates new form UserListDialog */
51 public UserListDialog(java.awt.Frame parent, boolean modal, TweetMainAction mainAction,
52 UserListGetter userListGetter, String listUserName) {
55 this.mainAction = mainAction;
56 this.listUserName = listUserName;
57 this.userListGetter = userListGetter;
59 final String username = listUserName;
65 addUserListToTable(username);
74 public void addUserListToTable(String username) {
75 this.listTableModel.clearStatus();
76 this.setTableEnvironment();
77 if( this.userListGetter != null ) {
78 List<UserList> list = this.userListGetter.getUserLists(username);
79 for(UserList u : list ) {
80 this.listTableModel.insertUserList(u);
88 public void setTableEnvironment() {
90 TableColumnModel columnModel = this.jTable1.getColumnModel();
91 TableColumn column = columnModel.getColumn(0);
92 column.setMinWidth( this.iconSize );
93 column.setMaxWidth( this.iconSize );
96 jTable1.addMouseListener(new MouseAdapter() {
99 public void mousePressed(MouseEvent e) {
100 // いったんSelectしていた情報を削除
101 jTable1.clearSelection();
102 // if (e.getButton() == MouseEvent.BUTTON3) {
103 Point p = e.getPoint();
104 int col = jTable1.columnAtPoint(p);
105 int row = jTable1.rowAtPoint(p);
106 jTable1.changeSelection(row, col, false, false);
108 //テーブルで選択した要素を詳細情報として表示
109 setDetailInformation(jTable1);
115 jTable1.addKeyListener(new KeyAdapter() {
118 public void keyReleased(KeyEvent ke) {
119 setDetailInformation(jTable1);
129 public void setDetailInformation(JTable table) {
130 UserList userList = getTweetTableInformation(table, listTableModel);
131 String listName = userList.getName();
132 String userName = userList.getUser().getName();
133 int subscriber = userList.getSubscriberCount();
134 int memberCount = userList.getMemberCount();
135 String description = userList.getDescription();
137 if( listName != null ) {
138 jLabel5.setText(listName);
140 if( userName != null ) {
141 jLabel6.setText(userName);
143 if( description != null ) {
144 jTextArea1.setText(description);
146 jLabel7.setText( memberCount + "");
147 jLabel8.setText( subscriber + "");
149 userImageLabel.setIcon( new ImageIcon(userList.getUser().getProfileImageURL() ) );
153 * テーブルで選択した場所のUserList情報を取得
157 public UserList getTweetTableInformation(JTable table, TableModel model) {
158 int index = table.convertRowIndexToModel(table.getSelectedRow());
159 UserList info = null;
160 if (model instanceof TweetListTableModel) {
161 info = ((TweetListTableModel) model).getUserList(index);
166 /** This method is called from within the constructor to
167 * initialize the form.
168 * WARNING: Do NOT modify this code. The content of this method is
169 * always regenerated by the Form Editor.
171 @SuppressWarnings("unchecked")
172 // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
173 private void initComponents() {
175 jScrollPane1 = new javax.swing.JScrollPane();
176 jTable1 = new javax.swing.JTable();
177 jButton1 = new javax.swing.JButton();
178 jButton2 = new javax.swing.JButton();
179 jPanel1 = new javax.swing.JPanel();
180 jLabel1 = new javax.swing.JLabel();
181 jLabel2 = new javax.swing.JLabel();
182 jLabel3 = new javax.swing.JLabel();
183 jLabel4 = new javax.swing.JLabel();
184 userImageLabel = new javax.swing.JLabel();
185 jLabel5 = new javax.swing.JLabel();
186 jLabel6 = new javax.swing.JLabel();
187 jLabel7 = new javax.swing.JLabel();
188 jLabel8 = new javax.swing.JLabel();
189 jScrollPane2 = new javax.swing.JScrollPane();
190 jTextArea1 = new javax.swing.JTextArea();
192 setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
194 jTable1.setModel(listTableModel);
195 jScrollPane1.setViewportView(jTable1);
197 jButton1.setText("OK");
198 jButton1.addActionListener(new java.awt.event.ActionListener() {
199 public void actionPerformed(java.awt.event.ActionEvent evt) {
200 jButton1ActionPerformed(evt);
204 jButton2.setText("キャンセル");
205 jButton2.addActionListener(new java.awt.event.ActionListener() {
206 public void actionPerformed(java.awt.event.ActionEvent evt) {
207 jButton2ActionPerformed(evt);
211 jPanel1.setBorder(javax.swing.BorderFactory.createEtchedBorder());
213 jLabel1.setText("リスト名");
215 jLabel2.setText("リスト所有者");
217 jLabel3.setText("フォロー中");
219 jLabel4.setText("リストをフォロー");
221 userImageLabel.setBackground(java.awt.Color.black);
222 userImageLabel.setOpaque(true);
224 jLabel5.setText("NULL");
226 jLabel6.setText("NULL");
228 jLabel7.setText("0");
230 jLabel8.setText("0");
232 jTextArea1.setColumns(20);
233 jTextArea1.setRows(5);
234 jScrollPane2.setViewportView(jTextArea1);
236 javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
237 jPanel1.setLayout(jPanel1Layout);
238 jPanel1Layout.setHorizontalGroup(
239 jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
240 .addGroup(jPanel1Layout.createSequentialGroup()
242 .addComponent(userImageLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 48, javax.swing.GroupLayout.PREFERRED_SIZE)
243 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
244 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
245 .addComponent(jLabel1)
246 .addComponent(jLabel2)
247 .addComponent(jLabel3)
248 .addComponent(jLabel4))
249 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
250 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
251 .addComponent(jLabel5, javax.swing.GroupLayout.PREFERRED_SIZE, 196, javax.swing.GroupLayout.PREFERRED_SIZE)
252 .addComponent(jLabel6, javax.swing.GroupLayout.PREFERRED_SIZE, 127, javax.swing.GroupLayout.PREFERRED_SIZE)
253 .addComponent(jLabel7, javax.swing.GroupLayout.PREFERRED_SIZE, 127, javax.swing.GroupLayout.PREFERRED_SIZE)
254 .addComponent(jLabel8, javax.swing.GroupLayout.PREFERRED_SIZE, 116, javax.swing.GroupLayout.PREFERRED_SIZE))
256 .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 388, Short.MAX_VALUE))
259 jPanel1Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {jLabel1, jLabel2, jLabel3, jLabel4});
261 jPanel1Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {jLabel5, jLabel6, jLabel7, jLabel8});
263 jPanel1Layout.setVerticalGroup(
264 jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
265 .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 98, Short.MAX_VALUE)
266 .addGroup(jPanel1Layout.createSequentialGroup()
268 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
269 .addGroup(jPanel1Layout.createSequentialGroup()
270 .addComponent(jLabel5)
271 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
272 .addComponent(jLabel6)
273 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
274 .addComponent(jLabel7)
275 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
276 .addComponent(jLabel8))
277 .addGroup(jPanel1Layout.createSequentialGroup()
278 .addComponent(jLabel1)
279 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
280 .addComponent(jLabel2)
281 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
282 .addComponent(jLabel3)
283 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
284 .addComponent(jLabel4))
285 .addComponent(userImageLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 48, javax.swing.GroupLayout.PREFERRED_SIZE))
289 javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
290 getContentPane().setLayout(layout);
291 layout.setHorizontalGroup(
292 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
293 .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 762, Short.MAX_VALUE)
294 .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
295 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
296 .addContainerGap(542, Short.MAX_VALUE)
297 .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
298 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
299 .addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 102, javax.swing.GroupLayout.PREFERRED_SIZE)
302 layout.setVerticalGroup(
303 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
304 .addGroup(layout.createSequentialGroup()
305 .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 349, Short.MAX_VALUE)
306 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
307 .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
308 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
309 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
310 .addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
311 .addComponent(jButton2))
316 }// </editor-fold>//GEN-END:initComponents
318 private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed
320 }//GEN-LAST:event_jButton2ActionPerformed
322 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
323 UserList info = getTweetTableInformation(jTable1, listTableModel);
325 JOptionPane.showMessageDialog(null, "リストを選択してください",
326 "Error", JOptionPane.ERROR_MESSAGE);
329 String listName = info.getName();
330 String userName = info.getUser().getScreenName();
331 int id = info.getId();
332 String fullName = info.getFullName();
334 if( listName == null || userName == null || fullName == null ) {
335 JOptionPane.showMessageDialog(null, "選択できないリストです",
336 "Error", JOptionPane.ERROR_MESSAGE);
339 //TODO: 更新間隔をリスト毎に設定できるようにするべきか検討
340 this.mainAction.actionAddListTab(userName, id, fullName, this.mainAction.getGetTimelinePeriod());
343 }//GEN-LAST:event_jButton1ActionPerformed
345 // Variables declaration - do not modify//GEN-BEGIN:variables
346 private javax.swing.JButton jButton1;
347 private javax.swing.JButton jButton2;
348 private javax.swing.JLabel jLabel1;
349 private javax.swing.JLabel jLabel2;
350 private javax.swing.JLabel jLabel3;
351 private javax.swing.JLabel jLabel4;
352 private javax.swing.JLabel jLabel5;
353 private javax.swing.JLabel jLabel6;
354 private javax.swing.JLabel jLabel7;
355 private javax.swing.JLabel jLabel8;
356 private javax.swing.JPanel jPanel1;
357 private javax.swing.JScrollPane jScrollPane1;
358 private javax.swing.JScrollPane jScrollPane2;
359 private javax.swing.JTable jTable1;
360 private javax.swing.JTextArea jTextArea1;
361 private javax.swing.JLabel userImageLabel;
362 // End of variables declaration//GEN-END:variables