이렇게하면 HTMLFactory를 편집 할 수 있습니다. 여기서 InlineView를 변경하여 대각선으로 파업 할 수있게했습니다. 당신의 목적에 맞게 사용하십시오.
import java.awt.BasicStroke;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.Stroke;
import javax.swing.text.AbstractDocument;
import javax.swing.text.AttributeSet;
import javax.swing.text.Element;
import javax.swing.text.StyleConstants;
import javax.swing.text.View;
import javax.swing.text.ViewFactory;
import javax.swing.text.html.CSS;
import javax.swing.text.html.HTML;
import javax.swing.text.html.HTMLEditorKit;
import javax.swing.text.html.InlineView;
/**
*
* @author François Billioud
*/
public class HTMLBetterEditorKit extends HTMLEditorKit {
private final HTMLEditorKit.HTMLFactory factory = new HTMLBetterFactory();
@Override
public ViewFactory getViewFactory() {
return factory;
}
public static class HTMLBetterFactory extends HTMLEditorKit.HTMLFactory {
@Override
public View create(Element elem) {
AttributeSet attrs = elem.getAttributes();
Object elementName = attrs.getAttribute(AbstractDocument.ElementNameAttribute);
Object o = (elementName != null) ? null : attrs.getAttribute(StyleConstants.NameAttribute);
if (o == HTML.Tag.CONTENT) {
return new StrikeView(elem);
}
return super.create(elem);
}
private class StrikeView extends InlineView {
public StrikeView(Element elem) { super(elem); }
public void paint(Graphics g, Shape allocation) {
setStrikeThrough(false);//We will do that ourselves
super.paint(g, allocation);
Object textDecorationValue = getAttributes().getAttribute(CSS.Attribute.TEXT_DECORATION);
if(textDecorationValue!=null && textDecorationValue.toString().equals("line-through")) {
paintStrikeLine(g, allocation);
}
}
//paints the strike line
public void paintStrikeLine(Graphics g, Shape a) {
int y = a.getBounds().y+a.getBounds().height/2;
int x1 = (int) a.getBounds().getX();
int x2 = (int) (a.getBounds().getX() + a.getBounds().getWidth());
Stroke oldStroke = ((Graphics2D)g).getStroke();
((Graphics2D)g).setStroke(new BasicStroke(2));
g.drawLine(x1, y, x2, y);
((Graphics2D)g).setStroke(oldStroke);
}
}
}
}
JTextPane의 EditorKit으로 BetterHTMLEditorKit을 설정하기 만하면됩니다.
이미지가 렌더링되는 방식을 편집하는 방법에 대해 예를 들어 FloatView를 만듭니다. 문제는 부동 이미지 주변에서 단락과 텍스트가 렌더링되는 방식을 편집해야하므로 BlockView 및 InlineView를 다시 정의해야한다는 것입니다. 따라서 쉬운 일이 아닙니다. 그러나 성공하면 공유하는 것을 주저하지 마십시오!
HTMLEditorKit.create 메서드를 확인하여 뷰 생성 중에 발생하는 상황을보다 잘 이해할 수 있습니다.
행운
편집 : 더 신중하게 질문을 읽은 후 , 나는 당신이 float
속성을 렌더링하지 않으려는 것을 깨닫게하지만,이 단지 수직 정렬 ..., 당신은 setAlignmentY
있습니다. 중간 정렬의 경우 0.5로 설정하십시오. JLabel의 경우 setVerticalAlignment
및 setVerticalTextPosition
setAlignmentY를 사용해야 할 수도 있습니다. 나는 그것을 설정할 개체가 없습니다. –
어떻게 이미지를 삽입합니까? – Sharcoux
무엇을 의미합니까? ~
통해 –