[Java] 75 Swing 15 JEditorPaneハイパーリンク・クリック後の動作

EditorPaneのハイパーリンク・クリック後の動作についてコードを追記しました。

リンク先のHTMLファイルは、JavaのクラスあるいはPythonの外部プログラムで作成します。

外部プログラムを使う場合、HTMLファイルのパスを渡すすべがないので、空のHTMLファイルを作成した後、Pythonのglobメソッドとsorted関数でファイルを見つけ出し加工します。

    // PAGE_CENTER設定
		editorPane = new JEditorPane();
		contentPane.add(editorPane, BorderLayout.CENTER);
		editorPane.setContentType("text/html");
		editorPane.setEditable(false);
		editorPane.setBackground(new Color(0xf0f8ff));
		editorPane.addHyperlinkListener(new HyperlinkListener() {
            @Override
            public void hyperlinkUpdate(HyperlinkEvent e) {
		        if (HyperlinkEvent.EventType.ACTIVATED.equals(e.getEventType())) {
		        	String race_html_pre = e.getURL().toString();
		        	System.out.println("race_html_pre " + race_html_pre);
              
                  // HTMLファイルパスの"file:"を削除
		        	String race_html = race_html_pre.substring(5);
		        	StringBuilder HTMLcode = new StringBuilder();
		        	HTMLcode.append("<table>" + "</table>");
		        	
		        	// 空HTMLファイルの作成
		            try{
		                File file = new File(race_html);
		                FileWriter filewriter = new FileWriter(file);
		                filewriter.write(HTMLcode.toString());
		                filewriter.close();}
		            catch(IOException e0){
		                System.out.println(e0);
		            }

               // ここでリンク先のHTMLファイルを作成する

		            Desktop desktop = Desktop.getDesktop();
		            try {
		                desktop.browse(e.getURL().toURI());
		            } catch (IOException e1) {
		                e1.printStackTrace();
		            } catch (URISyntaxException e1) {
		                e1.printStackTrace();
		            }
		        }
		    }
        });

[Java] 74 Swing 14 JEditorPaneのハイパーリンクHTML作成

前回の続きです。

早速ハイパーリンク付きのHTMLファイルを作成するコードを書きました。

実際はリンク先のHTMLファイルはまだ作られておらず、リンクをクリックすると同時にSQL検索(あるいはSQL登録前の元ファイル検索)してレースHTMLをPythonにて作成します。

出走レース番号を付番するためにJRAの最大出走回数記録を調べたところ、1986年以降生まれではハートランドヒリュの127戦でした。したがってゼロ埋めは3桁に設定しています。

        // ベタ書きHTMLの文字列インスタンスを作成
        StringBuilder HTMLcode = new StringBuilder();

        // 現在日時の文字列インスタンスを作成
        Date dateObj = new Date();
        SimpleDateFormat format = new SimpleDateFormat( "yyMMddHHmmss" );
        String now = format.format( dateObj );

        // 競走馬名を取得
        String name = nameAndID4.get(0);
        System.out.println("競走馬名 " + name);

        Integer count = 0;
        HTMLcode.append("<table" + " " + "border='1'" + " " + "class='dataframe'>" + "<thead><tr>");
        for (ArrayList<String> raceList: raceListConSorts){
            if (count == 0){
                for (int i = 0 ; i < raceList.size() ; i++){
                    HTMLcode.append("<th>" + raceList.get(i) + "</th>");}
                HTMLcode.append("</tr></thead><tbody>");
                HTMLcode.append("<tr>");
                count = count + 1;}

            else{
                for (int i = 0 ; i < raceList.size() ; i++){
                	if (i == 4) {
                		String race_html = String.format("/%s_%s_%03d.html",now,name,count);
                		HTMLcode.append("<td>");
                		HTMLcode.append("<a href='" + race_html + "'>" + raceList.get(i) + "</a>");
                		HTMLcode.append("</td>");
                	}
                	else {
                    HTMLcode.append("<td>" + raceList.get(i) + "</td>");
                    }
                }
                HTMLcode.append("</tr>");
                count++;
            }
        }
        HTMLcode.append("</tbody></table>");

        // HTMLファイル名を作成
        String filename = String.format("/%s_%s.html",now,name);

        // HTMLファイルの作成
        try{
            File file = new File(filename);
            FileWriter filewriter = new FileWriter(file);
            filewriter.write(HTMLcode.toString());
            filewriter.close();}
        catch(IOException e){
            System.out.println(e);
        }

[Java] 73 Swing 13 JEditorPaneにおけるハイパーリンク設定

JEditorPaneにおけるハイパーリンク設定を以下に記します。ハイパーリンクをクリックすると、ブラウザにリンク先の内容が表示されます。

仕組みができてしまえば、あとはhrefを仕込んだhtmlファイルを作るようにしていくわけですが、新たにリンク先htmlファイルも作らないといけないですし、作業量はそれなりです。

検索時にリンク先htmlを出走全レース作るフローにするとその分処理時間が長くなるため、ハイパーリンクをクリックするタイミングでSQL検索しリンク先htmlを作成するようにしたいところです。

一連の処理は[Java] 68の記事に書いた外部プログラムを拡充してPythonにさせるつもりです。

    // PAGE_CENTER設定
		editorPane = new JEditorPane();
		contentPane.add(editorPane, BorderLayout.CENTER);
		editorPane.setContentType("text/html");
		editorPane.setEditable(false);
		editorPane.setBackground(new Color(0xf0f8ff));
		editorPane.addHyperlinkListener(new HyperlinkListener() {
            @Override
            public void hyperlinkUpdate(HyperlinkEvent e) {
		        if (HyperlinkEvent.EventType.ACTIVATED.equals(e.getEventType())) {
		            Desktop desktop = Desktop.getDesktop();
		            try {
		                desktop.browse(e.getURL().toURI());
		            } catch (IOException e1) {
		                e1.printStackTrace();
		            } catch (URISyntaxException e1) {
		                e1.printStackTrace();
		            }
		        }
		    }
        });