web-dev-qa-db-ja.com

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

JScrollPaneのViewportViewとして、javax.swing.JPanelの代わりにorg.jdesktop.swingx.JXPanelを使用できます。

1。 "SwingX 1.6.4 All --Binary"をダウンロードし、プロジェクトのライブラリにjarを追加します ここ

2。JXPanelをJPanelではなくJScrollPaneのViewportViewとして設定します。

JScrollPane scrollPane = new JScrollPane();  
JXPanel panel = new JXPanel();  
scrollPane.setViewportView(panel);

3。次の2つのステートメントを追加します。

panel.setScrollableTracksViewportHeight(false);  
panel.setScrollableTracksViewportWidth(true);

4。次に、JPanelの場合と同じように、要素をJXPanelに追加できます。

1
cmicat

これを試してみてください。これは私には問題なく機能します。

0
erica may