固定幅にしたいJScrollPane
とFlowLayout
があります。垂直方向にのみスクロールする必要があり、ウィンドウのサイズを変更するとコンテンツが自動的に再配置されます。 setEnableHorizontalScroll(false)
のようなメソッドがあるはずだと思いますが、見つかりません。
これを行う簡単な方法はありますか?
最後に、私はその方法を見つけました。この非常に短い例を参照してください。高度なトリックは必要ありません。
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のチュートリアル から適応
次を使用できます。
import static javax.swing.ScrollPaneConstants.*;
// ...
JScrollPane.setHorizontalScrollBarPolicy(HORIZONTAL_SCROLLBAR_NEVER);
...しかし、これは水平スクロールバーが表示されないようにするだけです。
コンテンツを自動的に再配置する方法は、コンテンツが何であるかによって異なります。 JTextPane
またはJEditorPane
は、これを自動的に行います(上記のコードは必要ありません)。
これは、JDKですぐに使用できるカスタムソリューションではありません。
WrapLayout を使用できます。
または、カスタムパネルを作成して、スクロール可能なインターフェイスを実装することもできます。この場合のキーは、getScrollableTracksViewportWidth()をオーバーライドしてtrueを返すことです。したがって、レイアウトの目的で、パネルの幅ではなくビューポートの幅が使用されます。このアプローチの例は ScrollableFlowPanel にあります。
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に追加できます。
これを試してみてください。これは私には問題なく機能します。