Re: ctor: this.setLayout(
To: comp.lang.java.gui
In article
<837888c7-b487-4b0c-8411-de54f9bc017a@h23g2000prf.googlegroups.com>,
lbrtchx@gmail.com wrote:
[...]
I need to have both JEditorPanes and canvases as inner classes in the
same context class because I will have to coordinate some event
handling among them.
[...]
<sscce>
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.Graphics;
import java.io.IOException;
import java.net.URL;
import javax.swing.BoxLayout;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;
import javax.swing.text.Document;
/** @author John B. Matthews */
public class HtmlView extends JPanel implements HyperlinkListener {
private static final String name = "http://www.example.com";
private final JEditorPane jep;
private final Document doc;
public HtmlView() {
UrlPane up = new UrlPane();
jep = new JEditorPane();
jep.setEditable(false);
jep.addHyperlinkListener(this);
loadPage(jep, name);
doc = jep.getDocument();
JPanel vPanel = new JPanel();
vPanel.setLayout(new BoxLayout(vPanel, BoxLayout.Y_AXIS));
vPanel.add(up);
vPanel.add(jep);
JScrollPane sp = new JScrollPane(vPanel);
sp.setPreferredSize(new Dimension(800, 600));
sp.getVerticalScrollBar().setUnitIncrement(16);
this.add(sp);
}
private void loadPage(JEditorPane jep, String name) {
try {
jep.setPage(name);
} catch (IOException ioe) {
ioe.printStackTrace(System.err);
}
}
public void hyperlinkUpdate(HyperlinkEvent e) {
HyperlinkEvent.EventType type = e.getEventType();
final URL url = e.getURL();
if (type == HyperlinkEvent.EventType.ENTERED) {
System.out.println("URL: " + url);
} else if (type == HyperlinkEvent.EventType.ACTIVATED) {
System.out.println("Following link...");
try {
jep.setPage(url);
} catch (IOException ioException) {
System.err.println("Invalid link");
jep.setDocument(doc);
}
}
}
class UrlPane extends JPanel {
private final Font font = new Font("Serif", Font.BOLD, 36);
public UrlPane() {
this.setBackground(Color.lightGray);
this.setFont(font);
this.add(new JLabel(name));
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setFont(font);
g.drawString("\u2615", 5, this.getHeight());
}
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new HtmlView(), BorderLayout.CENTER);
f.pack();
f.setVisible(true);
}
});
}
}
</sscce>
--
John B. Matthews
trashgod at gmail dot com
http://home.roadrunner.com/~jbmatthews/
---
* Synchronet * The Whitehouse BBS --- whitehouse.hulds.com --- check it out free usenet!
--- Synchronet 3.15a-Win32 NewsLink 1.92
Time Warp of the Future BBS - telnet://time.synchro.net:24