1

基本的にこれは私がやりたいことです:

2 つの別個の JScrollPanes に 2 つの別個の JTextAreas があり、それらを結合したいので、テキストが最初の TextArea を長くする場合は、2 番目の TextArea で継続する必要があります。ただし、スクロールでも機能するはずです。最初のTextAreaをスクロールすると、2番目のTextAreaも一緒にスクロールする必要があります(逆も同様です)。表示可能な最大行数を計算して、表示される行数を確認しようとしました。私はこれを見つけました:

public void paint(Graphics g) {   
        super.paint(g);   
        final FontMetrics fontMetrics = g.getFontMetrics();   
        // get width of any char (font is monospaced)   
        final int charWidth = fontMetrics.charWidth('M');   
        final int charHeight = fontMetrics.getHeight();   
        final int prefWidth = this.getPreferredSize().width;   
        // get height of Parent (JScrollPane)   
        final int prefHeight = this.getParent().getHeight();   

        int maxChars = prefWidth/charWidth;   
        int maxLines = prefHeight/charHeight;   
    }  

しかし、getParent().getHeight()LayoutManager(SpringLayout)でコンポーネントのサイズを設定し、コンポーネントのサイズを設定するための制約を定義するだけなので、メソッドは機能していません。これは、コンポーネントの比率を固定するための最良の方法だと思います。ウィンドウのサイズを変更した後ここで間違っている場合は修正してください。したがって、サイズを設定したことがないため、getHeight()メソッドは0常に返されます。

ScrollPane にネストされた TextArea の表示される行を取得する他のメソッドはありますか? それとも私はここで完全に間違っていますか?

助けてくれてありがとう。

4

2 に答える 2

1

あなたの要件は私には意味がありません:

したがって、最初の TextArea のテキストが長すぎる場合は、2 番目の TextArea に続く必要があります。

では、各テキスト エリアを作成して 10 行を表示するとします。最初に 20 行を入力すると、2 番目にオーバーフローし、1 行になります。

最初の TextArea をスクロールすると、2 番目の TextArea も一緒にスクロールする必要があります (逆も同様です)。

テキスト領域が 1 行しかない場合、どのようにスクロールしますか?

于 2011-03-11T16:27:00.453 に答える
1

私はそのようなことをしたことがありませんが、問題を見る方法は質問を再定義することだと思います.

実際には、同じドキュメントに 2 つのビューが必要です。ビュー番号1は、最大長までのすべての文字を表示します。ビュー番号 2 には、残りのすべてが表示されます。

これは、基になるデータを共有するカスタムDocumentクラス (おそらく、ドキュメントの更新イベントを取得するためのマスター Document) を作成し、異なるオフセットを持つことで実現できると思います。

各 JTextAreas には、独自の Document インスタンスがあります。

最初のウィンドウがいっぱいになったら、手動で 2 番目のウィンドウにジャンプする必要があります (もちろん、MAX_LENGTH に達したときに自動的にそれを行うように TextArea をプログラムすることもできます)。

異なるデータを表示するため、スクローラーを接続する利点はわかりません。領域 1 で行 100 までスクロールすると、領域 2 で行 1100 までスクロールしたいということになるのはなぜですか?

paintそして、メソッドに触れるべきではないと思います。グラフィックではなく、必要なのはビジネスロジックです:)

于 2011-03-11T11:57:12.007 に答える