Re: Swing component to di
To: comp.lang.java.gui
In article <4915ae3d$0$6077$7836cce5@newsrazor.net>,
Daniel Pitts <newsgroup.spamfilter@virtualinfinity.net> wrote:
lbrtchx@gmail.com wrote:
~
I need to display a combination of text, diagrams and MathML based
formulas on a swing component in a way that, say, when you hover
the mouse or click on parts of the text, the corresponding parts in
the diagrams and/or formulas get highlighted or some action happens
on them
~
I did a search on:
~
MathML formula swing class "import java "
~
which gave me nothing useful
~
What would be the right swing text container/components to use? Do
you know of any example of such a thing out there?
googling for just mathml java turned up
<http://www.w3.org/Math/Software/mathml_software_cat_editors.html>
Might be a good place to start.
You might have to actually write some code if nothing fits out-of-the-box.
For text and diagrams, an HTMLDocument, which implements the Document
interface, might suffice:
<http://java.sun.com/javase/6/docs/api/javax/swing/text/Document.html>
<code>
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridLayout;
import java.io.IOException;
import java.net.URL;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
/** @author John B. Matthews */
public class HtmlView extends JPanel
implements DocumentListener, HyperlinkListener {
private static final String name = "http://www.example.com";
JEditorPane jep;
Document doc;
public HtmlView() {
this.setLayout(new GridLayout(1, 1));
jep = new JEditorPane();
jep.setEditable(false);
jep.addHyperlinkListener(this);
loadPage(jep, name);
doc = jep.getDocument();
doc.addDocumentListener(this);
JScrollPane sp = new JScrollPane(jep);
this.setPreferredSize(new Dimension(640, 480));
this.add(sp);
}
private void loadPage(JEditorPane jep, String name) {
try {
jep.setPage(name);
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
public void insertUpdate(DocumentEvent e) {}
public void removeUpdate(DocumentEvent e) {}
public void changedUpdate(DocumentEvent e) {
try {
System.out.println(doc.getText(0, doc.getLength()));
} catch (BadLocationException ble) {
ble.printStackTrace();
}
}
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.out.println("Invalid link");
jep.setDocument(doc);
}
}
}
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);
}
});
}
}
</code>
I don't know about MathML, but you might look for a corresponding
implementation of the Document interface.
--
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