Jskad/source/org/thdl/savant/TextPlayer.java

93 lines
2.4 KiB
Java
Raw Normal View History

2002-09-28 00:53:39 +00:00
package org.thdl.savant;
import java.awt.*;
import java.util.*;
import javax.swing.*;
import javax.swing.text.*;
public class TextPlayer extends JPanel implements AnnotationPlayer
{
private JTextComponent text;
private Hashtable hashStart, hashEnd, highlights;
private Highlighter highlighter;
private Highlighter.HighlightPainter highlightPainter;
public TextPlayer(JTextComponent textcomponent, Color highlightcolor, String ids, String startoffsets, String endoffsets)
{
text = textcomponent;
text.setEditable(false);
hashStart = new Hashtable();
hashEnd = new Hashtable();
highlights = new Hashtable();
StringTokenizer stIDS = new StringTokenizer(ids, ",");
StringTokenizer stSTARTS = new StringTokenizer(startoffsets, ",");
StringTokenizer stENDS = new StringTokenizer(endoffsets, ",");
while ((stIDS.hasMoreTokens()) && (stSTARTS.hasMoreTokens()) && (stENDS.hasMoreTokens())) {
String sID = stIDS.nextToken();
String sStart = stSTARTS.nextToken();
String sEnd = stENDS.nextToken();
try {
Integer start = new Integer(sStart);
hashStart.put(sID, start);
} catch (NumberFormatException err) {
hashStart.put(sID, new Integer(0));
}
try {
Integer end = new Integer(sEnd);
hashEnd.put(sID, end);
} catch (NumberFormatException err) {
hashEnd.put(sID, new Integer(0));
}
}
highlighter = text.getHighlighter();
highlightPainter = new DefaultHighlighter.DefaultHighlightPainter(highlightcolor);
setLayout(new GridLayout(1,1));
add(new JScrollPane(text, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER));
}
public boolean isPlayableAnnotation(String id)
{
return hashStart.containsKey(id);
}
public void startAnnotation(String id)
{
if (isPlayableAnnotation(id))
highlight(id);
}
public void stopAnnotation(String id)
{
if (isPlayableAnnotation(id))
unhighlight(id);
}
private void highlight(String id)
{
try
{
Integer startInt = (Integer)hashStart.get(id);
Integer endInt = (Integer)hashEnd.get(id);
int start = startInt.intValue();
int end = endInt.intValue();
Object tag = highlighter.addHighlight(start, end, highlightPainter);
highlights.put(id, tag);
}
catch (BadLocationException ble)
{
ble.printStackTrace();
}
}
private void unhighlight(String id)
{
if (highlights.containsKey(id))
{
highlighter.removeHighlight(highlights.get(id));
highlights.remove(id);
}
}
}