it-swarm-ja.tech

jscrollpaneで水平スクロールを無効にする

固定幅にしたいJScrollPaneFlowLayoutがあります。垂直方向にのみスクロールする必要があり、ウィンドウのサイズを変更するとコンテンツが自動的に再配置されます。 setEnableHorizontalScroll(false)のようなメソッドがあるはずだと思いますが、見つかりません。

これを行う簡単な方法はありますか?

16
phunehehe

最後に、私はその方法を見つけました。この非常に短い例を参照してください。高度なトリックは必要ありません。

public class MyTest extends JFrame {

    public static void main(String[] args) {
        MyTest test = new MyTest();
        test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        test.setSize(300, 200);
        test.setVisible(true);
    }

    public MyTest() {
        String[] data = {
            "Arlo", "Cosmo", "Elmo", "Hugo",
            "Jethro", "Laszlo", "Milo", "Nemo",
            "Otto", "Ringo", "Rocco", "Rollo"
        };
        JList list = new JList(data);
        list.setLayoutOrientation(JList.HORIZONTAL_WRAP);
        list.setVisibleRowCount(0);
        JScrollPane scroll = new JScrollPane(list);
        this.add(scroll);
    }
}

Sunのチュートリアル から適応

8
phunehehe

次を使用できます。

import static javax.swing.ScrollPaneConstants.*;
// ...
JScrollPane.setHorizontalScrollBarPolicy(HORIZONTAL_SCROLLBAR_NEVER);

...しかし、これは水平スクロールバーが表示されないようにするだけです。

コンテンツを自動的に再配置する方法は、コンテンツが何であるかによって異なります。 JTextPaneまたはJEditorPaneは、これを自動的に行います(上記のコードは必要ありません)。

23
Matthew Murdoch

これは、JDKですぐに使用できるカスタムソリューションではありません。

WrapLayout を使用できます。

または、カスタムパネルを作成して、スクロール可能なインターフェイスを実装することもできます。この場合のキーは、getScrollableTracksViewportWidth()をオーバーライドしてtrueを返すことです。したがって、レイアウトの目的で、パネルの幅ではなくビューポートの幅が使用されます。このアプローチの例は ScrollableFlowPanel にあります。

7
camickr