2016-10-13 9 views
0

メインパネルに複数のJPanelカードを挿入しようとしています。新しいカードパネルが合わない場合は、それを次の行に置いて欲しい。下の画像では、すべてのカードパネルが右に移動し、HORIZONTAL_SCROLLBAR_ALWAYSの横スクロールが設定されていることがわかります。だからここで私のメインパネルの各行に4つのカードパネルが必要なので、垂直スクロールが機能します。下記の答えに応じて スクロールフローレイアウトのブレーク要素がスクロール可能JPanel

public class PanelTraining extends JPanel{ 
    private static final long serialVersionUID = 1L; 


    public PanelTraining(List<FccMeta> ffcms) { 
     super(new BorderLayout()); // set layout to absolute 
     setPreferredSize(new Dimension(880, 580)); 
     setBorder(new LineBorder(Color.decode("#A11E1E"),1, true)); 

     JPanel pnlChart = new JPanel(); 

     pnlChart.setPreferredSize(new Dimension(860, 180)); 
     pnlChart.setBackground(Color.YELLOW); 
     add(pnlChart, BorderLayout.NORTH); 

     JPanel pnlTrSet = new JPanel(new FlowLayout(FlowLayout.LEADING, 5, 5)); 
     //pnlTrSet.setSize(860, 380); 

     for (FccMeta fccMeta : ffcms) { 
      JPanel pnlCard = new MyCustomPanelCard(); 
      pnlTrSet.add(pnlCard); 
     } 


     JScrollPane scroll = new JScrollPane(pnlTrSet); 
     //scroll.setPreferredSize(new Dimension(860, 380)); 
     scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); 
     scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 
     add(scroll, BorderLayout.CENTER); 

    } 
} 

enter image description here

EDIT

。私は this Class

ScrollablePanel pnlTrSet = new ScrollablePanel(new FlowLayout()); 
pnlTrSet.setScrollableWidth(ScrollablePanel.ScrollableSizeHint.FIT); 
pnlTrSet.setScrollableBlockIncrement(
     ScrollablePanel.VERTICAL, ScrollablePanel.IncrementType.PIXELS, 230); 
あなたはスクロール区画のビューポートのサイズに一定の幅を持っているあなたのパネルの Scrollableインタフェースを実装する必要が

enter image description here

+1

1)すぐに役立つようにするには、[MCVE]または[短く、自己完結型の正しい例](http://www.sscce.org/)を投稿してください。 2)ASCIIアート、またはGUIの*意図された*レイアウトの簡単な図を最小サイズで提供し、サイズ変更可能な場合は幅と高さを増やします。 –

答えて

3

で私の実装を変更しました。

基本的には、getScrollableTracksViewportWidth()メソッドをオーバーライドして「true」を返す必要があります。

これを行う簡単な方法は、Scrollable Panelを使用することです。このプロパティを制御できるメソッドがあります。

編集:

上記のみ表示され、水平スクロールバーを防ぐことができます。ただし、パネルの推奨サイズ計算がまだ正しくないため、FlowLayoutはすべてのボタンを1行に表示し続けます。

ボタンを折り返すには、パネルのFlowLayoutをWrap Layoutに置き換える必要があります。 は、パネルの適切な高さを正しく再計算し、コンポーネントをラップして垂直スクロールバーを表示できるようにします。

+0

あなたの答えを詳細に教えてください。私のパネルのスクロール可能なインターフェイスはどういう意味ですか? – gabby

+1

@gabby、1)Scrollableインターフェイスの詳細については、APIを読んでください。誰かがあなたが知らないクラスやインターフェースを提案したときには、それが最初に始まる場所です。 2)提案された方法を使用する例については、フォーラム/ Webを検索してください。 3)「スクロール・セービング・クライアントの実装」(http://docs.oracle.com/javase/tutorial/uiswing/components/scrollpane.html#scrollable)のSwingチュートリアルのセクションを読んでください。 – camickr

+0

はい私はしました。私はあなたが提供したものを得た結果によって私の質問を更新しました。 – gabby

関連する問題