-
Notifications
You must be signed in to change notification settings - Fork 4
/
SimpleMiniWebBrowser.java
211 lines (173 loc) · 5.91 KB
/
SimpleMiniWebBrowser.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
/* Swing Imports*/
import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;
import javax.swing.text.html.HTMLDocument;
import javax.swing.text.html.HTMLFrameHyperlinkEvent;
/* Abstract Window ToolKit imports */
import java.awt.BorderLayout;
import java.awt.Cursor;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.net.URL;
import java.util.ArrayList;
public class SimpleMiniWebBrowser extends JFrame implements HyperlinkListener {
// Create instances for...
private JButton buttonBack = new JButton("<"), buttonForward = new JButton(">"); //...the Back button
private JTextField locationTextField = new JTextField(35); //...the text field (35 chars)
private JEditorPane displayEditorPane = new JEditorPane(); //...the display panel
private ArrayList pageList = new ArrayList(); //...and an ArrayList for pageList
public SimpleMiniWebBrowser() {
setSize(640, 480); // Window size to 640px by 480px
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // What to do on close (default)
JPanel bttnPanel = new JPanel(); // Create a JPanel instance with refVar bttnPanel
// Back btn's ActionListener
buttonBack.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
backActn();
}
});
// Forward btn's ActionListener
buttonBack.setEnabled(false);
bttnPanel.add(buttonBack);
buttonForward.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
forwardActn();
}
});
// Setup The text Field
buttonForward.setEnabled(false);
bttnPanel.add(buttonForward);
locationTextField.addKeyListener(new KeyAdapter() {
public void keyReleased(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
actionGo();
}
}
});
// bttnGo
bttnPanel.add(locationTextField);
JButton bttnGo = new JButton("GO");
bttnGo.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
actionGo();
}
});
// Set Display Panel
bttnPanel.add(bttnGo);
displayEditorPane.setContentType("text/html");
displayEditorPane.setEditable(false);
displayEditorPane.addHyperlinkListener(this);
getContentPane().setLayout(new BorderLayout());
getContentPane().add(bttnPanel, BorderLayout.NORTH);
getContentPane().add(new JScrollPane(displayEditorPane), BorderLayout.CENTER);
}// Close SimpleMiniWebBrowser()
//Navigate back action
private void backActn() {
URL currentUrl = displayEditorPane.getPage();
int pageIndex = pageList.indexOf(currentUrl.toString());
try {
showPage(new URL((String) pageList.get(pageIndex - 1)), false);
} catch (Exception e) {
}
}
// Navigate forward action
private void forwardActn() {
URL currentUrl = displayEditorPane.getPage();
int pageIndex = pageList.indexOf(currentUrl.toString());
try {
showPage(new URL((String) pageList.get(pageIndex + 1)), false);
} catch (Exception e) {
}
}
// Go action
private void actionGo() {
URL verifiedUrl = verifyUrl(locationTextField.getText());
if (verifiedUrl != null) {
showPage(verifiedUrl, true);
} else {
System.out.println("Invalid URL");
}
}
// Verify the URL
private URL verifyUrl(String url) {
if (!url.toLowerCase().startsWith("http://"))
return null;
URL verifiedUrl = null;
try {
verifiedUrl = new URL(url);
} catch (Exception e) {
return null;
}
return verifiedUrl;
}
// Display the page
private void showPage(URL pageUrl, boolean addToList) {
try {
URL currentUrl = displayEditorPane.getPage();
displayEditorPane.setPage(pageUrl);
URL newUrl = displayEditorPane.getPage();
if (addToList) {
int listSize = pageList.size();
if (listSize <= 0) {
return;
}
int pageIndex = pageList.indexOf(currentUrl.toString());
if (pageIndex >= listSize - 1) {
return;
}
for (int i = listSize - 1; i > pageIndex; i--) {
pageList.remove(i);
}
pageList.add(newUrl.toString());
}
locationTextField.setText(newUrl.toString());
updateBttns();
} catch (Exception e) {
System.out.println("Unable to load page");
}
} // Close showPage()
// Update the Buttons
private void updateBttns() {
if (pageList.size() < 2) {
buttonBack.setEnabled(false);
buttonForward.setEnabled(false);
} else {
URL currentUrl = displayEditorPane.getPage();
int pageIndex = pageList.indexOf(currentUrl.toString());
buttonBack.setEnabled(pageIndex > 0);
buttonForward.setEnabled(pageIndex < (pageList.size() - 1));
}
}
// Update the links
public void hyperlinkUpdate(HyperlinkEvent event) {
HyperlinkEvent.EventType eventType = event.getEventType();
if (eventType == HyperlinkEvent.EventType.ACTIVATED) {
if (event instanceof HTMLFrameHyperlinkEvent) {
HTMLFrameHyperlinkEvent linkEvent = (HTMLFrameHyperlinkEvent) event;
HTMLDocument document = (HTMLDocument) displayEditorPane.getDocument();
document.processHTMLFrameHyperlinkEvent(linkEvent);
} else {
showPage(event.getURL(), true);
}
}
}
/* MAIN METHOD*/
public static void main(String[] args) {
SimpleMiniWebBrowser browser = new SimpleMiniWebBrowser();
browser.setVisible(true);
}//main()
}// Close Class--SimpleMiniWebBrowser