001 package org.util.html.demo;
002
003 import java.util.*;
004 import java.io.*;
005 import java.net.*;
006 import java.awt.*;
007 import java.awt.image.BufferedImage;
008 import java.awt.event.*;
009 import javax.swing.*;
010 import javax.swing.event.*;
011
012 import org.util.html.objects.*;
013 import org.util.html.render.*;
014 import org.util.html.factory.*;
015 import org.util.log.*;
016
017
018 public class Demo1 {
019
020 private JFrame frame_;
021 private JComponent main_content_;
022 private LogListener log_listener_;
023
024 private HTMLDocument document_;
025 private HTMLDocumentRenderer renderer_;
026 private HTMLDocumentFactory factory_;
027 private JButton back_, update_, go_;
028 private JTextField text_;
029 private int scroll_bar_width_ = 15;
030
031 public static void main(String[] args) throws Exception {
032 final Demo1 demo = new Demo1();
033 SwingUtilities.invokeAndWait(new Runnable(){public void run(){
034 demo.createAndShowGUI1();
035 }});
036 SwingUtilities.invokeAndWait(new Runnable(){public void run(){
037 demo.createAndShowGUI2();
038 }});
039 Thread init_process = new Thread(new Runnable(){
040 public void run(){
041 demo.start();
042 }
043 }, "demo process");
044 init_process.start();
045 init_process.join();
046 SwingUtilities.invokeAndWait(new Runnable(){public void run(){
047 demo.createAndShowGUI3();
048 }});
049 }
050 private void createAndShowGUI1() {
051 JFrame frame = new JFrame("Demo1");
052 frame.setSize(500, 500);
053 frame.setLocationRelativeTo(null);
054 frame.setVisible(true);
055 frame_ = frame;
056 }
057 private void createAndShowGUI2() {
058 back_ = new JButton("<");
059 update_ = new JButton("o");
060 text_ = new JTextField();
061 go_ = new JButton(">");
062
063 JPanel toolpane = new JPanel();
064 toolpane.setPreferredSize(new Dimension(500, 24));
065 toolpane.setLayout(new BoxLayout(toolpane, BoxLayout.X_AXIS));
066 toolpane.add(back_);
067 toolpane.add(update_);
068 toolpane.add(text_);
069 toolpane.add(go_);
070
071 JPanel contentpane = new JPanel(new BorderLayout());
072 contentpane.add(toolpane, BorderLayout.NORTH);
073
074 frame_.setContentPane(contentpane);
075 contentpane.revalidate();
076 }
077 private void createAndShowGUI3() {
078
079 text_.addActionListener(new ActionListener(){
080 public void actionPerformed(ActionEvent e) {
081 openInOtherThread(text_.getText());
082 }
083 });
084
085 main_content_ = renderer_.getPanel();
086
087 MouseManager mouse_manager = new MouseManager();
088 main_content_.addMouseListener(mouse_manager);
089 main_content_.addMouseMotionListener(mouse_manager);
090 //main_content_.addMouseWheelListener(mouse_manager);
091
092 main_content_.addComponentListener(new ComponentAdapter(){
093 public void componentResized(ComponentEvent e) {
094 Component c = e.getComponent();
095 renderer_.resized(c.getWidth(), c.getHeight());
096 }
097 });
098 main_content_.setFocusable(true);
099
100 JScrollPane sp = new JScrollPane(main_content_);
101 sp.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
102 sp.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
103 renderer_.setScrollPane(sp);
104
105 frame_.getContentPane().add(sp);
106
107 frame_.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
108 Image icon = org.util.resource.ResourceManager.getImage("./data/icon/frame_icon.png", 30, 30);
109 frame_.setIconImage(icon);
110 }
111
112 private void start() {
113 HTMLDocument document = new HTMLDocument();
114 HTMLDocumentRenderer renderer = new HTMLDocumentRenderer(document);
115 renderer.addHTMLDocumentRendererListener(new HTMLDocumentRendererListener(){
116 public void repaint() {
117 if(main_content_!=null)
118 main_content_.repaint();
119 }
120 });
121 document_ = document;
122 renderer_ = renderer;
123 factory_ = new HTMLDocumentFactory();
124 factory_.setLogListener(getLogListener());
125 try{
126 openSamplePage();
127 }catch(Exception e) {
128 alertError(e);
129 }
130 }
131
132 private void openSamplePage() throws Exception {
133 open("http://sakura.meijo-u.ac.jp");
134 }
135
136 private void openInOtherThread(final String url_text) {
137 new Thread(new Runnable(){public void run(){
138 try{
139 open(url_text);
140 }catch(Exception e) {
141 alertError(e);
142 }
143 }}, "open url").start();
144 }
145
146 private void open(String url_text) throws Exception {
147 URL url = new URL(url_text);
148 frame_.setTitle(url.toString());
149 factory_.createDocument(url, document_);
150 }
151
152 private class MouseManager implements MouseListener, MouseMotionListener, MouseWheelListener {
153 private int last_x;
154 private int last_y;
155 private int pressed_x;
156 private int pressed_y;
157
158 public void mousePressed(MouseEvent e) {
159 main_content_.requestFocus();
160 pressed_x = e.getX();
161 pressed_y = e.getY();
162 }
163 public void mouseReleased(MouseEvent e) {
164
165 }
166 public void mouseClicked(MouseEvent e) {
167
168 }
169 public void mouseEntered(MouseEvent e) {
170
171 }
172 public void mouseExited(MouseEvent e) {
173
174 }
175 public void mouseMoved(MouseEvent e) {
176 int x = e.getX();
177 int y = e.getY();
178
179 last_x = x;
180 last_y = y;
181 }
182 public void mouseDragged(MouseEvent e) {
183 int x = e.getX();
184 int y = e.getY();
185
186 last_x = x;
187 last_y = y;
188 }
189 public void mouseWheelMoved(MouseWheelEvent e) {
190 //renderer_.moveView(0, -e.getWheelRotation()*20);
191 }
192 }
193
194
195
196 private LogListener getLogListener(){
197 if(log_listener_==null){
198 log_listener_ = new GUIAlert(main_content_);
199 }
200 return log_listener_;
201 }
202
203 public void alert(Object message) {
204 getLogListener().alert(message);
205 }
206 public void alertError(Object message) {
207 getLogListener().alertError(message);
208 }
209 public void log(Object message) {
210 getLogListener().log(message);
211 }
212
213 }