From b09892047cb7b814994c7c6df13e6e635d8cb438 Mon Sep 17 00:00:00 2001 From: yuki Date: Sat, 5 Jan 2008 14:49:01 +0000 Subject: [PATCH] =?utf8?q?=E3=82=A6=E3=82=A3=E3=83=B3=E3=83=89=E3=82=A6?= =?utf8?q?=E3=81=AB=E6=83=85=E5=A0=B1=E8=A1=A8=E7=A4=BA.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit git-svn-id: http://192.168.11.7/svn/repository/NicoBrowser@18 bdf3b611-c98c-6041-8292-703d9c9adbe7 --- src/nicobrowser/MainWindow.form | 105 +++++++++++++++++++---- src/nicobrowser/MainWindow.java | 143 +++++++++++++++++++++++++++---- src/nicobrowser/NicoContent.java | 14 +++ src/nicobrowser/NicoHttpClient.java | 57 +++++++++--- test/nicobrowser/NicoHttpClientTest.java | 3 + 5 files changed, 278 insertions(+), 44 deletions(-) diff --git a/src/nicobrowser/MainWindow.form b/src/nicobrowser/MainWindow.form index f404790..fb0ce4f 100644 --- a/src/nicobrowser/MainWindow.form +++ b/src/nicobrowser/MainWindow.form @@ -21,11 +21,12 @@ - + - - - + + + + @@ -35,10 +36,12 @@ - + + + @@ -56,9 +59,11 @@ + + @@ -66,7 +71,7 @@ - + @@ -82,14 +87,10 @@ - + - + - - - - @@ -99,10 +100,8 @@ - - - - + + @@ -118,6 +117,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -129,8 +184,26 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/nicobrowser/MainWindow.java b/src/nicobrowser/MainWindow.java index 643381c..3c84221 100644 --- a/src/nicobrowser/MainWindow.java +++ b/src/nicobrowser/MainWindow.java @@ -6,8 +6,15 @@ */ package nicobrowser; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.List; +import java.util.Vector; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.swing.ImageIcon; +import javax.swing.ImageIcon; import javax.swing.table.DefaultTableModel; -import org.apache.commons.httpclient.HttpClient; /** * @@ -15,8 +22,19 @@ import org.apache.commons.httpclient.HttpClient; */ public class MainWindow extends javax.swing.JFrame { - private static final String COLUMN_NAMES[] = {"サムネイル", "タイトル", "説明", "投稿日"}; - private DefaultTableModel tableModel = new DefaultTableModel(COLUMN_NAMES, 0); + private class MyTableModel extends DefaultTableModel { + + private MyTableModel(String[] COLUMN_NAMES, int i) { + super(COLUMN_NAMES, i); + } + + @Override + public Class getColumnClass(int columnIndex) { + return getValueAt(0, columnIndex).getClass(); + } + } + private static final String COLUMN_NAMES[] = {"サムネイル", "タイトル", "説明", "ページリンク"}; + private DefaultTableModel tableModel = new MyTableModel(COLUMN_NAMES, 0); /** Creates new form MainWindow */ public MainWindow() { @@ -33,19 +51,25 @@ public class MainWindow extends javax.swing.JFrame { jScrollPane1 = new javax.swing.JScrollPane(); jTable1 = new javax.swing.JTable(); - jPanel1 = new javax.swing.JPanel(); + jPanel2 = new javax.swing.JPanel(); loadButton = new javax.swing.JButton(); + jLabel3 = new javax.swing.JLabel(); + listNoField = new javax.swing.JTextField(); + jPanel1 = new javax.swing.JPanel(); jLabel1 = new javax.swing.JLabel(); jLabel2 = new javax.swing.JLabel(); mailField = new javax.swing.JTextField(); passwordField = new javax.swing.JTextField(); + loginButton = new javax.swing.JButton(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); jTable1.setModel(tableModel); + jTable1.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF); + jTable1.setEnabled(false); jScrollPane1.setViewportView(jTable1); - jPanel1.setBorder(javax.swing.BorderFactory.createEtchedBorder()); + jPanel2.setBorder(javax.swing.BorderFactory.createEtchedBorder()); loadButton.setText("Load"); loadButton.addActionListener(new java.awt.event.ActionListener() { @@ -54,18 +78,65 @@ public class MainWindow extends javax.swing.JFrame { } }); + jLabel3.setText("ListNo"); + + listNoField.setText("4315046"); + + javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2); + jPanel2.setLayout(jPanel2Layout); + jPanel2Layout.setHorizontalGroup( + jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel2Layout.createSequentialGroup() + .addContainerGap() + .addComponent(loadButton) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jLabel3) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(listNoField, javax.swing.GroupLayout.DEFAULT_SIZE, 96, Short.MAX_VALUE) + .addContainerGap()) + ); + jPanel2Layout.setVerticalGroup( + jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel2Layout.createSequentialGroup() + .addContainerGap() + .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(loadButton) + .addComponent(jLabel3) + .addComponent(listNoField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + + jPanel1.setBorder(javax.swing.BorderFactory.createEtchedBorder()); + jLabel1.setText("mail"); jLabel2.setText("password"); + mailField.setEditable(false); + + passwordField.setEditable(false); + passwordField.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + passwordFieldActionPerformed(evt); + } + }); + + loginButton.setText("LogIn"); + loginButton.setEnabled(false); + loginButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + loginButtonActionPerformed(evt); + } + }); + javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap() - .addComponent(loadButton) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(loginButton) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jLabel1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(mailField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) @@ -73,7 +144,7 @@ public class MainWindow extends javax.swing.JFrame { .addComponent(jLabel2) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(passwordField, javax.swing.GroupLayout.PREFERRED_SIZE, 151, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addContainerGap(31, Short.MAX_VALUE)) ); jPanel1Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {mailField, passwordField}); @@ -83,10 +154,10 @@ public class MainWindow extends javax.swing.JFrame { .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(loadButton) + .addComponent(loginButton) .addComponent(jLabel1) - .addComponent(jLabel2) .addComponent(mailField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel2) .addComponent(passwordField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); @@ -95,26 +166,56 @@ public class MainWindow extends javax.swing.JFrame { getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addGroup(layout.createSequentialGroup() .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 476, Short.MAX_VALUE) - .addComponent(jPanel1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 512, Short.MAX_VALUE) + .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addContainerGap() - .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 229, Short.MAX_VALUE) + .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 256, 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) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap()) ); pack(); }// //GEN-END:initComponents private void loadButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_loadButtonActionPerformed + String listNo = listNoField.getText(); + if (listNo.length() < 1) { + return; + } + List contList = NicoHttpClient.getInstance().loadMyList(listNo); + int rowHeight = -1; + for (NicoContent cont : contList) { + Vector v = new Vector(); + ImageIcon icon = new ImageIcon(); + try { + icon = new ImageIcon(new URL(cont.getImageLink())); + if (rowHeight < 0) { + rowHeight = icon.getIconHeight(); + } + } catch (MalformedURLException ex) { + Logger.getLogger(MainWindow.class.getName()).log(Level.SEVERE, null, ex); + } + v.add(icon); + v.add(cont.getTitle()); + v.add(cont.getDescription()); + v.add(cont.getPageLink()); + tableModel.addRow(v); + } + jTable1.setRowHeight(rowHeight); + }//GEN-LAST:event_loadButtonActionPerformed + + private void loginButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_loginButtonActionPerformed String mail = mailField.getText(); String password = passwordField.getText(); if (mail.length() < 1 || password.length() < 1) { @@ -122,7 +223,11 @@ public class MainWindow extends javax.swing.JFrame { return; } NicoHttpClient.getInstance().login(mail, password); - }//GEN-LAST:event_loadButtonActionPerformed +}//GEN-LAST:event_loginButtonActionPerformed + + private void passwordFieldActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_passwordFieldActionPerformed + // TODO add your handling code here: + }//GEN-LAST:event_passwordFieldActionPerformed /** * @param args the command line arguments @@ -138,13 +243,15 @@ public class MainWindow extends javax.swing.JFrame { // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; + private javax.swing.JLabel jLabel3; private javax.swing.JPanel jPanel1; + private javax.swing.JPanel jPanel2; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JTable jTable1; + private javax.swing.JTextField listNoField; private javax.swing.JButton loadButton; + private javax.swing.JButton loginButton; private javax.swing.JTextField mailField; private javax.swing.JTextField passwordField; // End of variables declaration//GEN-END:variables - - } diff --git a/src/nicobrowser/NicoContent.java b/src/nicobrowser/NicoContent.java index 404ba11..6d09258 100644 --- a/src/nicobrowser/NicoContent.java +++ b/src/nicobrowser/NicoContent.java @@ -8,6 +8,7 @@ public class NicoContent { private String pageLink; private String imageLink; private String title; + private String description; private Date publishedDate; public String getPageLink() { @@ -34,6 +35,10 @@ public class NicoContent { this.title = title; } + void setDescription(String description) { + this.description = description; + } + void setPublishedDate(Date publishedDate) { this.publishedDate = publishedDate; } @@ -41,4 +46,13 @@ public class NicoContent { public Date getPublishedDate() { return publishedDate; } + + public String getDescription() { + return description; + } + + @Override + public String toString() { + return new String(getTitle() + ": " + getPageLink()); + } } diff --git a/src/nicobrowser/NicoHttpClient.java b/src/nicobrowser/NicoHttpClient.java index f009f34..e6eb26a 100644 --- a/src/nicobrowser/NicoHttpClient.java +++ b/src/nicobrowser/NicoHttpClient.java @@ -146,7 +146,9 @@ public class NicoHttpClient extends HttpClient { private List createContentsList(List list) { class CallBack extends HTMLEditorKit.ParserCallback { - private String imageLink; + private boolean descFlag; + private String imageLink = new String(); + private StringBuilder description = new StringBuilder(); @Override public void handleSimpleTag(HTML.Tag t, MutableAttributeSet a, int pos) { @@ -157,17 +159,51 @@ public class NicoHttpClient extends HttpClient { } } - // 属性を表示 -// private void printAttributes(MutableAttributeSet a) { -// Enumeration e = a.getAttributeNames(); -// while (e.hasMoreElements()) { -// Object key = e.nextElement(); -// System.out.println("---- " + key.toString() + " : " + a.getAttribute(key)); -// } -// } + @Override + public void handleStartTag(HTML.Tag t, MutableAttributeSet a, int pos) { + if (HTML.Tag.P.equals(t)) { + if ("nico-description".equals( + a.getAttribute(HTML.Attribute.CLASS).toString())) { + descFlag = true; + } + } +// System.out.println("--------<" + t.toString() + ">--------"); +// printAttributes(a); + } + + @Override + public void handleEndTag(HTML.Tag t, int pos) { + if (HTML.Tag.P.equals(t)) { + descFlag = false; + } +// System.out.println("----------------"); + } + + @Override + public void handleText(char[] data, int pos) { + if (descFlag) { + description.append(data); + } + +// System.out.println("--------TEXT--------"); +// System.out.println(data); + } + + private void printAttributes(MutableAttributeSet a) { + Enumeration e = a.getAttributeNames(); + while (e.hasMoreElements()) { + Object key = e.nextElement(); + System.out.println("---- " + key.toString() + " : " + a.getAttribute(key)); + } + } + public String getImageLink() { return imageLink; } + + public String getDescription(){ + return description.toString(); + } } List contList = new ArrayList(); @@ -179,7 +215,7 @@ public class NicoHttpClient extends HttpClient { content.setPageLink(entry.getLink()); content.setPublishedDate(entry.getPublishedDate()); - // サムネイル画像リンクの取得 + // サムネイル画像リンクと説明文の取得 CallBack callBack = new CallBack(); for (SyndContentImpl sc : (List) entry.getContents()) { try { @@ -190,6 +226,7 @@ public class NicoHttpClient extends HttpClient { } } content.setImageLink(callBack.getImageLink()); + content.setDescription(callBack.getDescription()); // リストへ追加. contList.add(content); diff --git a/test/nicobrowser/NicoHttpClientTest.java b/test/nicobrowser/NicoHttpClientTest.java index cfc86eb..50c2868 100644 --- a/test/nicobrowser/NicoHttpClientTest.java +++ b/test/nicobrowser/NicoHttpClientTest.java @@ -96,6 +96,9 @@ public class NicoHttpClientTest { list = instance.loadMyList(OK_LIST_NO); assertNotNull(list); assertNotSame(0, list.size()); + for(Object o:list){ + System.out.println(o.toString()); + } list = instance.loadMyList("XXXX"); assertNotNull(list); -- 2.11.0