作業部屋の使い方を試しています。
(empty log message)
| @@ -5,9 +5,15 @@ | ||
| 5 | 5 | */ |
| 6 | 6 | |
| 7 | 7 | package htmltest1; |
| 8 | + | |
| 8 | 9 | import java.io.*; |
| 9 | 10 | import java.net.*; |
| 11 | +import java.util.HashMap; | |
| 10 | 12 | |
| 13 | +import javax.swing.text.*; | |
| 14 | +import javax.swing.text.html.*; | |
| 15 | +import javax.swing.text.html.parser.ParserDelegator; | |
| 16 | + | |
| 11 | 17 | /** |
| 12 | 18 | * |
| 13 | 19 | * @author kgto |
| @@ -50,4 +56,101 @@ | ||
| 50 | 56 | System.err.println(e); |
| 51 | 57 | } |
| 52 | 58 | } |
| 59 | + | |
| 60 | + public void exec2(){ | |
| 61 | + Reader reader; | |
| 62 | + try { | |
| 63 | + reader = new BufferedReader(new StringReader(pageData)); | |
| 64 | + // ここを検索したいタグ分繰り返せばいいのだろうか? | |
| 65 | + MyParserCallback cb = new MyParserCallback(); | |
| 66 | + ParserDelegator pd = new ParserDelegator(); | |
| 67 | + pd.parse(reader, cb, true); | |
| 68 | + | |
| 69 | + reader.close(); | |
| 70 | + | |
| 71 | + } catch (IOException e) { | |
| 72 | + System.err.println(e); | |
| 73 | + } | |
| 74 | + | |
| 75 | + | |
| 76 | + } | |
| 77 | + | |
| 78 | + class MyParserCallback extends HTMLEditorKit.ParserCallback { | |
| 79 | + | |
| 80 | + // Tag毎の階層 | |
| 81 | + HashMap<HTML.Tag,Integer> map = new HashMap<HTML.Tag,Integer>(); | |
| 82 | + | |
| 83 | + @Override | |
| 84 | + public void handleSimpleTag(HTML.Tag tag, MutableAttributeSet attr, int pos){ | |
| 85 | + | |
| 86 | + | |
| 87 | + StringBuffer strBuf = new StringBuffer(); | |
| 88 | + String ret; | |
| 89 | + | |
| 90 | + strBuf.append("x : S : " + tag.toString()); | |
| 91 | + ret = (String)attr.getAttribute(HTML.Attribute.VALUE); | |
| 92 | + if(ret != null) { | |
| 93 | + strBuf.append(" [VALUE] " + ret); | |
| 94 | + } | |
| 95 | + System.out.println(strBuf); | |
| 96 | + | |
| 97 | + } | |
| 98 | + | |
| 99 | + @Override | |
| 100 | + public void handleStartTag(HTML.Tag tag, MutableAttributeSet attr, int pos){ | |
| 101 | + // Tag毎の階層を保持 | |
| 102 | + int count = 1; | |
| 103 | + if(map.containsKey(tag)) { | |
| 104 | + count = map.get(tag); | |
| 105 | + count++; | |
| 106 | + } | |
| 107 | + map.put(tag, count); | |
| 108 | + | |
| 109 | + | |
| 110 | + StringBuffer strBuf = new StringBuffer(); | |
| 111 | + String ret; | |
| 112 | + | |
| 113 | + strBuf.append(count + " : F : " + tag.toString()); | |
| 114 | + ret = (String)attr.getAttribute(HTML.Attribute.ID); | |
| 115 | + if(ret != null) { | |
| 116 | + strBuf.append(" [ID] " + ret); | |
| 117 | + } | |
| 118 | + ret = (String)attr.getAttribute(HTML.Attribute.CLASS); | |
| 119 | + if(ret != null) { | |
| 120 | + strBuf.append(" [CLASS] " + ret); | |
| 121 | + } | |
| 122 | + ret = (String)attr.getAttribute(HTML.Attribute.VALUE); | |
| 123 | + if(ret != null) { | |
| 124 | + strBuf.append(" [VALUE] " + ret); | |
| 125 | + } | |
| 126 | + System.out.println(strBuf); | |
| 127 | + | |
| 128 | + } | |
| 129 | + | |
| 130 | + @Override | |
| 131 | + public void handleEndTag(HTML.Tag tag, int pos){ | |
| 132 | + // Tag毎の階層を取得 | |
| 133 | + int count = 0; | |
| 134 | + if(map.containsKey(tag)) { | |
| 135 | + count = map.get(tag); | |
| 136 | + } | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + System.out.println(count + " : E : " + tag.toString()); | |
| 142 | + | |
| 143 | + // Tag毎の階層減算 | |
| 144 | + map.put(tag, --count); | |
| 145 | + } | |
| 146 | + | |
| 147 | + @Override | |
| 148 | + public void handleText(char[] data, int pos){ | |
| 149 | + | |
| 150 | + String dat = new String(data); | |
| 151 | + System.out.println(dat); | |
| 152 | + | |
| 153 | + } | |
| 154 | + } | |
| 155 | + | |
| 53 | 156 | } |
| @@ -6,7 +6,8 @@ | ||
| 6 | 6 | |
| 7 | 7 | package htmltest1; |
| 8 | 8 | |
| 9 | -import javax.swing.JTextArea; | |
| 9 | +//import javax.swing.JTextArea; | |
| 10 | +import javax.swing.*; | |
| 10 | 11 | import java.io.*; |
| 11 | 12 | |
| 12 | 13 | /** |
| @@ -36,6 +37,7 @@ | ||
| 36 | 37 | jLabel1 = new javax.swing.JLabel(); |
| 37 | 38 | jTextField1 = new javax.swing.JTextField(); |
| 38 | 39 | jButton1 = new javax.swing.JButton(); |
| 40 | + jTabbedPane1 = new javax.swing.JTabbedPane(); | |
| 39 | 41 | jScrollPane1 = new javax.swing.JScrollPane(); |
| 40 | 42 | jTextArea1 = new javax.swing.JTextArea(); |
| 41 | 43 | jScrollPane2 = new javax.swing.JScrollPane(); |
| @@ -63,10 +65,14 @@ | ||
| 63 | 65 | jTextArea1.setRows(5); |
| 64 | 66 | jScrollPane1.setViewportView(jTextArea1); |
| 65 | 67 | |
| 68 | + jTabbedPane1.addTab("tab1", jScrollPane1); | |
| 69 | + | |
| 66 | 70 | jTextArea2.setColumns(20); |
| 67 | 71 | jTextArea2.setRows(5); |
| 68 | 72 | jScrollPane2.setViewportView(jTextArea2); |
| 69 | 73 | |
| 74 | + jTabbedPane1.addTab("tab2", jScrollPane2); | |
| 75 | + | |
| 70 | 76 | javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); |
| 71 | 77 | getContentPane().setLayout(layout); |
| 72 | 78 | layout.setHorizontalGroup( |
| @@ -74,11 +80,10 @@ | ||
| 74 | 80 | .addGroup(layout.createSequentialGroup() |
| 75 | 81 | .addComponent(jLabel1) |
| 76 | 82 | .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) |
| 77 | - .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 1, Short.MAX_VALUE) | |
| 83 | + .addComponent(jTextField1, javax.swing.GroupLayout.DEFAULT_SIZE, 319, Short.MAX_VALUE) | |
| 78 | 84 | .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) |
| 79 | 85 | .addComponent(jButton1)) |
| 80 | - .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 398, Short.MAX_VALUE) | |
| 81 | - .addComponent(jScrollPane2) | |
| 86 | + .addComponent(jTabbedPane1) | |
| 82 | 87 | ); |
| 83 | 88 | layout.setVerticalGroup( |
| 84 | 89 | layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) |
| @@ -88,9 +93,7 @@ | ||
| 88 | 93 | .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) |
| 89 | 94 | .addComponent(jButton1)) |
| 90 | 95 | .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) |
| 91 | - .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 147, javax.swing.GroupLayout.PREFERRED_SIZE) | |
| 92 | - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) | |
| 93 | - .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 120, Short.MAX_VALUE)) | |
| 96 | + .addComponent(jTabbedPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 283, Short.MAX_VALUE)) | |
| 94 | 97 | ); |
| 95 | 98 | |
| 96 | 99 | pack(); |
| @@ -104,6 +107,7 @@ | ||
| 104 | 107 | //jTextArea1.append(jTextField1.getText()); |
| 105 | 108 | psr = new HtmlParser(jTextField1.getText()); |
| 106 | 109 | psr.exec(); |
| 110 | + psr.exec2(); | |
| 107 | 111 | jTextArea1.setText(psr.pageData); |
| 108 | 112 | // disp_jTextArea1(); |
| 109 | 113 | }//GEN-LAST:event_jButton1ActionPerformed |
| @@ -132,12 +136,17 @@ | ||
| 132 | 136 | * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html |
| 133 | 137 | */ |
| 134 | 138 | try { |
| 135 | - for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { | |
| 139 | + for (UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) { | |
| 136 | 140 | if ("Nimbus".equals(info.getName())) { |
| 137 | - javax.swing.UIManager.setLookAndFeel(info.getClassName()); | |
| 141 | + UIManager.setLookAndFeel(info.getClassName()); | |
| 138 | 142 | break; |
| 139 | 143 | } |
| 140 | 144 | } |
| 145 | + // add start | |
| 146 | + String look = UIManager.getSystemLookAndFeelClassName(); | |
| 147 | + UIManager.setLookAndFeel(look); | |
| 148 | + // add end | |
| 149 | + | |
| 141 | 150 | } catch (ClassNotFoundException ex) { |
| 142 | 151 | java.util.logging.Logger.getLogger(Htmlt1Frame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); |
| 143 | 152 | } catch (InstantiationException ex) { |
| @@ -156,6 +165,23 @@ | ||
| 156 | 165 | } |
| 157 | 166 | }); |
| 158 | 167 | } |
| 168 | + /** | |
| 169 | + * 外観をOSのものに似せる | |
| 170 | + * <p> | |
| 171 | + * (WindowsならWindowsの外観に似る) | |
| 172 | + * </p> | |
| 173 | + */ | |
| 174 | + private void initLookFeel() { | |
| 175 | + try { | |
| 176 | + String look = | |
| 177 | + // "com.sun.java.swing.plaf.windows.WindowsLookAndFeel"; | |
| 178 | + UIManager.getSystemLookAndFeelClassName(); | |
| 179 | + UIManager.setLookAndFeel(look); | |
| 180 | + } catch (Exception e) { | |
| 181 | + // 駄目なときは諦める | |
| 182 | + e.printStackTrace(); | |
| 183 | + } | |
| 184 | + } | |
| 159 | 185 | |
| 160 | 186 | // Variables declaration - do not modify//GEN-BEGIN:variables |
| 161 | 187 | private javax.swing.JButton jButton1; |
| @@ -162,6 +188,7 @@ | ||
| 162 | 188 | private javax.swing.JLabel jLabel1; |
| 163 | 189 | private javax.swing.JScrollPane jScrollPane1; |
| 164 | 190 | private javax.swing.JScrollPane jScrollPane2; |
| 191 | + private javax.swing.JTabbedPane jTabbedPane1; | |
| 165 | 192 | private javax.swing.JTextArea jTextArea1; |
| 166 | 193 | private javax.swing.JTextArea jTextArea2; |
| 167 | 194 | private javax.swing.JTextField jTextField1; |