2016-12-23 11 views
0

私はカードレイアウトJPANelを持っています。その中にはJScrollPaneがあり、その中にバネレイアウトのJPanelがあります。 springlayout JPanelは、JPanelを上から下に動的に追加しますが、JButtonがJPanelを超えた場合、JScrollPaneは余分なコンテンツに対応しません。また、コンテンツが追加されても、バネレイアウトのJPanelの高さは0のままです。 resizableプロパティをtrueに設定すると、何も行われません。JScrollPaneはリサイズしないJPanelによって反応しません

ここにコードがあります。私はカードレイアウトJPanelとコードを切り替えるコードを省略しました。

SpringLayout mainlayout = new SpringLayout(); 
    JPanel maincard = new JPanel(mainlayout); // springlayout JPanel 
    for (int i = 0; i < info.size(); i++) { 
     GridLayout entryLayout = new GridLayout(1, 1); 
     JPanel entry = new JPanel(entryLayout); 
     entry.setSize(800, 30); 

     JButton name = new JButton(); 
     name.setSize(250, 30); 
     name.setText(info.get(i).name); 

     entry.add(name); 

     mainlayout.putConstraint(SpringLayout.NORTH, entry, 
       i * 100 + 5, 
       SpringLayout.NORTH, maincard); // moves JPanel lower and lower 
     maincard.add(entry); 
    } 
    maincard.setSize(width, 30 * (info.size() + 1)); 
    maincard.revalidate(); 
    JScrollPane scroll = new JScrollPane(maincard); 
    scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); 
    scroll.setSize(200, 200); // this and setPreferredSize don't affect 
    cardpanel.add(scroll, cardName); 
    cardpanel.setSize(20, 200); // no effect 
+0

'明らかにspringlayout JPanelの高さは0のままです - SpringLayoutは必要なすべての制約のために使用するより複雑なレイアウトマネージャの1つです。私の提案は、別のレイアウトマネージャを使用することです。 SpringLayoutを本当に使いたいのであれば、[SpringLayoutの使い方](http://docs.oracle.com/javase/tutorial/uiswing/layout/spring.html)のSwingチュートリアルのセクションを読む必要があります。 )を参照してください。このチュートリアルには、他の標準レイアウトマネージャのセクションも含まれています。 – camickr

+0

はい、他のレイアウトも試したことを忘れてしまいました。期待される出力は連絡先リストのようなもので、JPanelsというエントリがあります。私はGridLayoutを試しましたが、エントリのサイズを制御することはできません。 Box/BoxLayoutでは、項目はコンテナを超えて決して移動しません(gridlayoutも)。 GridBagLayoutにも同じ問題があります。境界線は問題外です(オーバーレイする必要はありません)。フローはラッピングのみで水平にします。 –

+0

コンポーネントは使用可能なスペースに収まるようにサイズが設定されているため、GridLayoutは機能しません。 BoxLayoutまたはGridBagLayoutは、コンポーネントを垂直方向に追加するために機能します。 – camickr

答えて

0

私はこれにいくつか問題がありました。私のために働いたのは境界線を使っていたことでした。また、スクロールパネルを更新するために新しい要素を追加した後でrevalidateを呼び出す必要があります。

public BookingTable() 
{ 
    super(new BorderLayout()); 
    _contentPanel = new JPanel(); 
    _contentPanel.setLayout(new BoxLayout(_contentPanel, BoxLayout.Y_AXIS)); 
    _scrollPane = new JScrollPane(_contentPanel); 

    add(_scrollPane, BorderLayout.CENTER); 
} 

private void addToPanel(EntryView panel) 
{ 
    panel.setPreferredSize(new Dimension(150, 35)); 
    panel.setMaximumSize(new Dimension(160, 45)); 
    panel.setMinimumSize((new Dimension(80, 30))); 

    _contentPanel.add(panel); 
    _contentPanel.revalidate(); 
} 

ホープこれはあなたを支援します。ここでは

は、私はしばらく前に私のプロジェクトで使用されるコードの一例です!もう一つのヒントは、スクロールペインから要素を削除する場合、UIから要素を実際に削除するためにRepaintを呼び出す必要があります。

+0

メソッド名は大文字で始めるべきではありません。 – camickr

+0

私は最近、自分自身から離れています。これは私が変更した古いコードです。 –

関連する問題