2009-11-13 15 views
13

私はJScrollPaneFlowLayoutを固定幅にしたいと思っています。垂直方向にのみスクロールする必要があり、ウィンドウのサイズを変更するとコンテンツが自動的に再配置されます。私はsetEnableHorizontalScroll(false)のような方法があるべきだと思うがそれを見つけることができない。jscrollpaneの水平スクロールを無効にする

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

答えて

7

で見つけることができます私の解決策はJScrollPane source codeを修正し、追加のパラメータを渡して水平スクロールを無効にすることでした。編集は本当に簡単です:

ライン53の場合:

$.fn.jScrollPane = function (settings, horizontalScrollingEnabled) { 

その後、ライン177上:あなたが変更する必要があるすべてです

if (horizontalScrollingEnabled) { 
isScrollableH = percentInViewH > 1; 
} else { 
isScrollableH = false; 
} 

。変更されたソースコードを縮小してページに含める。 JScrollPaneのを初期化するとき、あなたは今、あなたはそれがそうのように水平方向にスクロールするかどうかを設定することができます。

$('.scroll-pane').jScrollPane("", false); 

役に立てば幸いです。

19

あなたは使用することができます。

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

を...しかし、これは単に今までに示されているから、水平スクロールバーを防ぐことができます。

コンテンツを自動的に並べ替えるには、コンテンツの内容によって異なります。 JTextPaneまたはJEditorPaneは自動的にこれを行います(上記のコードは必要ありません)。

+0

に行ったように、あなたはJXPanelに要素を追加することができ、そして、彼らは自動再配置ではありません。 – phunehehe

+0

)JScrollPane.HOTRIZONTAL_SCROLLBAR_​​NEVERは、そのインポートをスキップしたい場合に渡す必要がある変数です。 – LouwHopley

+0

他のコンポーネントはScrollableを実装し、getScrollableTracksViewportWidth()がfalseを返すようにしなければなりません( –

6

これは、JDKのカスタムソリューションではありません。

WrapLayoutを使用できます。

カスタムパネルを作成し、Scrollableインターフェイスを実装することもできます。この場合のキーは、trueを返すようにgetScrollableTracksViewportWidth()をオーバーライドしているため、パネルの幅ではなくビューポートの幅がレイアウト目的で使用されます。

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's tutorial

+0

サードパーティのライブラリを使用するというのは嫌いですが、Javaはデフォルトでそれを持っているはずです 共有してくれてありがとう、私はすでに必要なことをしています:) – phunehehe

-1

から適応:このアプローチの例は、最後に私は、何の高度なトリックは必要ありません。この非常に短い例を参照してくださいどのように見つけたScrollableFlowPanel

+3

OPはSwingについて質問していましたJavaのJScrollPaneコンポーネントであり、jqueryのjScrollPaneプラグインではありません。 – Dathan

+0

@Dathan LOL:D:Dこのユーザーは飲酒しました – khandelwaldeval

-1

水平バーのCSSクラスを使用して、表示を「なし」に設定するだけです。あなたのjScrollPlaneの下部に(あなたがそれを初期化した後)に追加します。ページ上の倍数を使用している場合

$('.jspHorizontalBar').css({ 'display': 'none' }); 

、および水平バーが必要であることを、いくつかの、あなたは常に親を含めるようにターゲティングを編集することができます素子。

+3

質問はJava Swingコンポーネントです。 – xmedeko

-1

だけjquery.jscrollpane.jsあなたが代わりにしているjavax.swingのorg.jdesktop.swingx.JXPanel使用することができます

+1

質問は、Java Swingコンポーネントについてです。 –

1

isScrollableH = percentInViewH > 1;を削除します。あなたの側JScrollPaneのViewportViewなどのJPanel:

ダウンロード "SwingX 1.6.4すべて - バイナリ"、およびプロジェクトのライブラリhere.

のViewportViewとしてセットJXPanelにjarファイルを追加代わりのJPanelのあなたの側JScrollPane:

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

3.追加次の2つのステートメント:

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

4.その後、あなたは内容が `固定サイズのJPanel`sあるJPanelの

関連する問題