Context : フラッシュカード アプリケーションでは、CardData
(フラッシュカードの片面を表すデータ構造) のビューがあります。最も基本的な形式では、String text
. ビュー (として知られているCardDataView
) はtext
、編集不可のJTextArea
内ので構成されJScrollPane
ます。
ある時点で、これらの を (垂直に) 並べる必要があるCardDataView
ため、それらを垂直に配置しますBox
。
問題は次のとおりです。ウィンドウを「推奨」サイズ ( で決定pack
) から拡大し、サイズを元に戻すと、JScrollPane は水平スクロール バーを追加し、テキスト フィールドを水平方向にスクロールできるようにします。基本的に、テキスト領域のサイズを大きくしてはいけません。
これが私のコードです(削除して簡略化しました):
public class DebugTest {
public static void main(String[] args) {
CardDataView cdv = new CardDataView(new CardData(
"Lorem ipsum dolor sit amet filler filler filler"));
JFrame frame = new JFrame();
frame.add(new JScrollPane(cdv), BorderLayout.CENTER);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
class CardData {
private String text; // text on the card
/*
* NOTE: This class has been simplified for SSCCE purposes. It's not really
* just a String field in production; rather, it has an image and other
* properties.
*/
public CardData(String text) {
super();
this.text = text;
}
public String getText() {
return text;
}
}
class CardDataView extends Box {
private JTextArea txtrText; // the text area for the text
/*
* NOTE: As with CardData, this class has been simplified. It's not just a
* JTextArea; it's also an ImageView (custom class; works fine), among other
* things.
*/
public CardDataView(CardData data) {
super(BoxLayout.Y_AXIS);
txtrText = new JTextArea();
txtrText.setLineWrap(true);
txtrText.setRows(3);
txtrText.setEditable(false);
txtrText.setWrapStyleWord(true);
final JScrollPane scrollPane = new JScrollPane(txtrText);
add(scrollPane);
txtrText.setText(data.getText());
}
}
さて、私を本当に混乱させているのは(私が間違っていない限り)、テキストとスクロールペインを含むテキストエリアを作成するだけで(同じ行数を設定しても)、データとビュークラスを本質的にインライン化する場合です。 、同じラップ設定など)、期待どおりに動作します。何が起こっている可能性がありますか?
懸念事項: - すべての輸入は順調です。- なぜ: が本番環境にCardLayoutView
あるのか疑問に思っている場合はBox
、テキスト ボックス以上のものがあります。の代わりにJPanel
と I を使用すると、同じエラーが発生します。-クラスをまったく使用しない (テキスト領域のテキストを手動で設定する) と、同じ問題が発生します。setLayout
super
CardData
何か案は?