Reputation: 109
I know there is a method in StyleConstants that can set the text with one underline.
But how to do if I want to set the text with double underline?
Is there any simple way?
Upvotes: 2
Views: 791
Reputation: 1
You'll type out in the CSS element
{ text-decoration: underline double;}
for example: p { text-decoration: underline double;}
Upvotes: -1
Reputation: 57381
http://java-sl.com/tip_colored_strikethrough.html The link shows colored strikethrough but you can use the same approach and draw 2 lines
import javax.swing.*;
import javax.swing.text.*;
import java.awt.*;
public class ColoredStrikeThroughText {
public ColoredStrikeThroughText() {
JFrame fr = new JFrame("Custom color StrikeThrough attribute");
fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JEditorPane pane = new JEditorPane();
pane.setEditorKit(new StyledEditorKit() {
public ViewFactory getViewFactory() {
return new NewViewFactory();
}
});
pane.setText("Color red text, color blue text, text without coloring.");
StyledDocument doc = (StyledDocument) pane.getDocument();
MutableAttributeSet attr = new SimpleAttributeSet();
attr.addAttribute("strike-color", Color.red);
doc.setCharacterAttributes(0, 9, attr, false);
attr.addAttribute("strike-color", Color.blue);
doc.setCharacterAttributes(17, 27, attr, false);
JScrollPane sp = new JScrollPane(pane);
fr.getContentPane().add(sp);
fr.setSize(300, 300);
fr.setLocationRelativeTo(null);
fr.setVisible(true);
}
public static void main(String[] args) {
ColoredStrikeThroughText test = new ColoredStrikeThroughText();
}
}
class NewViewFactory implements ViewFactory {
public View create(Element elem) {
String kind = elem.getName();
if (kind != null) {
if (kind.equals(AbstractDocument.ContentElementName)) {
return new MyLabelView(elem);
}
else if (kind.equals(AbstractDocument.ParagraphElementName)) {
return new ParagraphView(elem);
}
else if (kind.equals(AbstractDocument.SectionElementName)) {
return new BoxView(elem, View.Y_AXIS);
}
else if (kind.equals(StyleConstants.ComponentElementName)) {
return new ComponentView(elem);
}
else if (kind.equals(StyleConstants.IconElementName)) {
return new IconView(elem);
}
}
// default to text display
return new LabelView(elem);
}
}
class MyLabelView extends LabelView {
public MyLabelView(Element elem) {
super(elem);
}
public void paint(Graphics g, Shape allocation) {
super.paint(g, allocation);
paintStrikeLine(g, allocation);
}
public void paintStrikeLine(Graphics g, Shape a) {
Color c=(Color)getElement().getAttributes().getAttribute("strike-color");
if (c!=null) {
int y = a.getBounds().y + a.getBounds().height - (int) getGlyphPainter().getDescent(this);
y = y - (int) (getGlyphPainter().getAscent(this) * 0.3f);
int x1 = (int) a.getBounds().getX();
int x2 = (int) (a.getBounds().getX() + a.getBounds().getWidth());
Color old = g.getColor();
g.setColor(c);
g.drawLine(x1, y, x2, y);
g.setColor(old);
}
}
}
Upvotes: 1