これは、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メソッドをチェックして、ビュー生成中に何が起こっているかをよりよく理解してください。
幸運
EDIT: より慎重にあなたの質問を読んだ後、私はあなたがfloat
属性をレンダリングしたくないことを認識し、ちょうど垂直方向の配置...このためには、setAlignmentY
を持っています。ミドルアラインメントの場合は0.5に設定します。 JLabelの場合は、setVerticalAlignment
とsetVerticalTextPosition
のsetAlignmentYを使用する必要があります。私はそれを設定するオブジェクトがありません。 –
イメージをどのように挿入しますか? – Sharcoux
どういう意味ですか? 〜 –