I\'m trying for more than 2 days to implement a specific requirement for a text editor window... unfortunately without success so far :(
The goal is to get a text editor
I think this might be difficult to achieve using highlighters - I don't think it is what they were designed for. You may need to do it with custom painting code:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;
import javax.swing.JFrame;
import javax.swing.JTextPane;
import javax.swing.text.BadLocationException;
public class HighlightLineTest {
private static class HighlightLineTextPane extends JTextPane {
public HighlightLineTextPane() {
// Has to be marked as transparent so the background is not replaced by
// super.paintComponent(g);
setOpaque(false);
}
@Override
protected void paintComponent(Graphics g) {
g.setColor(getBackground());
g.fillRect(0, 0, getWidth(), getHeight());
try {
Rectangle rect = modelToView(getCaretPosition());
if (rect != null) {
g.setColor(Color.CYAN);
g.fillRect(0, rect.y, getWidth(), rect.height);
}
} catch (BadLocationException e) {
}
super.paintComponent(g);
}
@Override
public void repaint(long tm, int x, int y, int width, int height) {
// This forces repaints to repaint the entire TextPane.
super.repaint(tm, 0, 0, getWidth(), getHeight());
}
}
public static void main(String[] args) {
JFrame frame = new JFrame("Highlight test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new HighlightLineTextPane());
frame.setBounds(100, 100, 300, 400);
frame.setVisible(true);
}
}