import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.MalformedURLException;
class JEditorPaneDemo
{
public static void main(String args[])
{
new MainWindow();
}
}
class MainWindow extends JFrame
{
// メンバ
JEditorPane html_view;
JTextField text_url;
JComboBox encoding_list;
File current_path = new File("");
// 定数
final String line_separator = System.getProperty("line.separator");
final String file_separator = System.getProperty("file.separator");
final String ENCODING_SJIS = "Shift_JIS";
final String ENCODING_EUC = "EUC-JP";
public MainWindow()
{
super("Local HTML Viewer");
setBackground(Color.white);
// ウインドウリスナの追加
WindowListener listener = new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
};
addWindowListener(listener);
// HTML表示部の構築
html_view = new JEditorPane("text/html","<h1 align = \"center\">Html Viewer</h1>");
html_view.setEditable(false);
// ハイパーリンクリスナの追加
HyperlinkListener listener_html_view = new HyperlinkListener()
{
public void hyperlinkUpdate(HyperlinkEvent e)
{
if(e.getEventType() == HyperlinkEvent.EventType.ACTIVATED)
{
File link_target = new File(current_path.getAbsolutePath() + file_separator + e.getDescription());
html_view.setText(getTextFromFile(link_target));
try
{
text_url.setText(link_target.toURL().toString());
}
catch(MalformedURLException me)
{
System.err.println(me);
}
}
}
};
html_view.addHyperlinkListener(listener_html_view);
// ファイルを開くボタンの追加
JButton button_open = new JButton("Open");
ActionListener listener_button_open = new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
// ファイルを開くダイアログの表示
JFileChooser file_choose = new JFileChooser(current_path);
if(file_choose.showOpenDialog(MainWindow.this) == JFileChooser.APPROVE_OPTION)
{
File file = file_choose.getSelectedFile();
current_path = new File(file.getParent());
html_view.setText(getTextFromFile(file));
try
{
text_url.setText(file.toURL().toString());
}
catch(MalformedURLException me)
{
System.err.println(me);
}
}
}
};
button_open.addActionListener(listener_button_open);
// URL表示部の追加
text_url = new JTextField(30);
text_url.setEditable(false);
// エンコーディングをリストへ追加
encoding_list = new JComboBox();
encoding_list.addItem(ENCODING_SJIS);
encoding_list.addItem(ENCODING_EUC);
// ツールバーの定義
JToolBar toolbar = new JToolBar(JToolBar.HORIZONTAL);
toolbar.setLayout(new FlowLayout());
toolbar.add(button_open);
toolbar.add(text_url);
toolbar.add(encoding_list);
// HTML表示部へスクロールバーを追加
JScrollPane scrollview = new JScrollPane(html_view);
// ウインドウへコンポーネントを追加
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.add(toolbar,BorderLayout.NORTH);
panel.add(scrollview,BorderLayout.CENTER);
setContentPane(panel);
// ウインドウの表示
setSize(800,600);
setVisible(true);
}
public String getTextFromFile(File file)
{
String text = "";
try
{
// 指定のエンコーディングで入力ストリームを構築
String encoding = encoding_list.getSelectedItem().toString();
FileInputStream input = new FileInputStream(file);
BufferedReader reader = new BufferedReader(new InputStreamReader(input,encoding));
// Stringオブジェクトに読み込む
String buffer;
while((buffer = reader.readLine()) != null)
{
// Metaタグを含む行を無視
if(buffer.toLowerCase().indexOf("meta http-equiv") == -1)
{
text = text + buffer + line_separator;
}
}
}
catch(IOException e)
{
System.err.println(e);
}
return(text);
}
}
Source is here. (ZIP Format,1707Byte,Shift-JIS)