だから、私はこのJTexrtAreaを持っています。これは私のニーズにほぼ完璧です。唯一の問題は、行の間隔です。設定できません。(なぜJTextPaneではないのですか?JTextAreaでは間隔を変更でき、JTextAreaはJTextPaneよりもはるかに軽量であり、プログラムにはそれらがたくさんあります)。
私は以前にこの質問をしました、そしてこれは私がユーザーStanislavLから得た答えです:
JTextAreaの行間隔を上書きするには、PlainView(PLainDocumentのレンダリングに使用)を確認してください。
public void paint(Graphics g、Shape a)メソッドには次の行があります
drawLine(line, g, x, y);
y += fontHeight;
したがって、yオフセットを固定してレンダリングを調整できます。
BasicTextAreaUIメソッドでビューを作成します。それをPlainViewの独自の実装に置き換えます
public View create(Element elem) {
Document doc = elem.getDocument();
Object i18nFlag = doc.getProperty("i18n"/*AbstractDocument.I18NProperty*/);
if ((i18nFlag != null) && i18nFlag.equals(Boolean.TRUE)) {
// build a view that support bidi
return createI18N(elem);
} else {
JTextComponent c = getComponent();
if (c instanceof JTextArea) {
JTextArea area = (JTextArea) c;
View v;
if (area.getLineWrap()) {
v = new WrappedPlainView(elem, area.getWrapStyleWord());
} else {
v = new PlainView(elem);
}
return v;
}
}
return null;
}
彼が私に何をするように言っているかについての一般的な考えは理解していますが、それを行う方法がわかりません。また、デフォルトのJTextAreaの「プロパティ」を上書きしたくないので、デフォルトを使用するか、カスタムを使用するかを選択できます。
JTextAreaコードの変更のみが
y += fontHeight
、
に
y+= (fontHeight +(or -) additionalSpacing)
。
どうすればこれを達成できますか?どのクラスを使用/コピーしますか?どこに置けばいいの?それらを使用可能にするにはどうすればよいですか?どうすればすべてを機能させることができますか?
これがあまりにも具体的すぎて役に立たないと思う場合は、既存のコンポーネントに100%基づいてカスタムスイングコンポーネントを作成する方法に関する一般的なチュートリアルを誰かが書くことができます。次に、誰かがいくつかの値を簡単に変更して、ニーズに合わせて調整することができます。