4

JTextArea で JScrollPane を使用する私の最初の試みは計画されていません -

JFrame window = new JFrame("Scroll test");       
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setResizable(false);
window.setLayout(null);
window.setVisible(true);
window.setBounds(500, 200, 700, 700);

JTextArea textArea = new JTextArea(5,30);
textArea.setBounds(18, 0, 682, 500);
textArea.setEditable(false);

JScrollPane textScroll = new JScrollPane(textArea,    JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
            JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

textScroll.setBounds(0, 0, 18, 500);
window.add(textScroll);

基本的にはそれだけです。左側にスクロールペインが表示されますが、テキスト領域をがらくたで埋めて境界を超えて拡大しても、ドラッグできるブロックの1つが空です....ありがとう

4

2 に答える 2

6

提案:

  • JTextArea の境界または preferredSize を設定しないでください。どちらも、拡張を制限して機能するスクロールバーが表示されないようにします。
  • JTextArea に意味のある列数と行数を指定することをお勧めします。
  • null レイアウトまたは絶対配置を使用しないでください。それぞれが賢明で使いやすいレイアウト マネージャーを使用する入れ子になったコンテナーを使用する方がはるかに優れています。
  • ここで他の誰かが示唆しているように、JScrollPane の preferredSize を設定しないでください。繰り返しますが、必要なのは JTextArea の列と行の属性に適切な数値を使用することだけです。
  • 代わりに、コンポーネント独自の優先サイズとレイアウト マネージャーに重い作業を任せてください。

編集:あなたは、

最終的にはJFrameにもっと多くのものが必要になるため、absoluteを使用する必要があります。レイアウトマネージャーは、すべてを正しく配置するために必要な自由を与えてくれません

私の回答: あなたがそう言っているのは、レイアウト マネージャーの完全な使用と機能、およびそれらが複雑な GUI の作成を絶対配置よりもはるかに簡単にする方法に慣れていないためです。昔からの Swing ユーザーとして私を信じてください。Swing の専門家に尋ねれば、彼らも同じことを教えてくれるでしょう。たとえば、絶対配置で複雑なレイアウトを作成した後、セットに JRadioButton をもう 1 つ追加する必要があることに気付いたとします。絶対配置を行っている場合は、GUI のサイズを調整し、追加によって影響を受けるすべてのコンポーネントの位置をリセットする必要があります。レイアウト マネージャーを使用する場合、特にレイアウトとそのコンテナーを相互にネストする場合は、コードの 1 行を変更するだけで済みます。

于 2012-10-02T16:54:43.573 に答える
4

問題は、スクロールペインのサイズを幅 18 に設定していることです。通常の垂直スクロールバーが約 20px を占めることを考慮すると、あまり表示されません。

  1. nullどうしても必要な場合を除き、レイアウトを使用しないでください
  2. 境界/サイズなどを強制しないでください...
  3. への呼び出しJFrame.setVisible(boolean)は最後の呼び出しにする必要があります

以下に、開始するための例を示します。

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;

public class TestScrollPane {

    protected void initUI() {
        JFrame window = new JFrame(TestScrollPane.class.getSimpleName());
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setResizable(false);
        JTextArea textArea = new JTextArea(25, 30);

        JScrollPane textScroll = new JScrollPane(textArea, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
                JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

        window.add(textScroll);
        window.pack();
        window.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new TestScrollPane().initUI();
            }
        });
    }
}
于 2012-10-02T16:58:24.613 に答える