2017-04-04 3 views
0

それはうまく動作しないのか、それとも別の方法で動作するのか分かりません。スクロールせずにスクロールペインのコンテンツを水平に自動サイズ変更する

私は異なる項目を持つ3つのリストを持つorg.openide.windows.TopComponentを持っています。このリストは、その名前をクリックすることで隠すことができるので、高さは表示されるものに応じて変わります。リスト全体の高さがTopComponentの高さより大きい場合、スクロールバーが表示されます。幅が変更された場合は、リスト内の要素が並べ替えられて、リスト全体が使用可能な幅になるようにします。だから私は、その後のアプローチは、次のとおりです。

トップコンポーネント

インサイド側JScrollPane(私が必要なスクロールを提供します)。垂直スクロールのみ。

JPanelの内側にあります。

コンテンツをクリックして非表示にする3つのリスト(JListを含むJScrollPanes)とそれぞれのJLabelの内部にあります。

このパターンに従えば、すべてがうまく見えます。幅を変更すると、リストの要素が大きくなり、新しい幅を使用するように再配置されます。しかし、元のサイズに戻してみると、リストはそのまま残り、スクロール(水平)のようにいくつかの要素が隠れてしまいます(十分なスペースがありません)。しかし、そこにはありません!しかし、私は、外側スクロールペインを削除し、私は(両方とも私はそれが広く、狭くする場合)が、私は私が必要とする垂直スクロールを持っていない...リストは完全に罰金サイズを変更幅を変更する場合

public class ViewPalettePanel extends TopComponent { 

    fcp = new PalettePanel(); 
    scroll = new JScrollPane(fcp, 
      JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, 
      JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); 
    GridBagConstraints gbc = new GridBagConstraints(); 
    gbc.gridx = 1; 
    gbc.gridy = 1; 
    gbc.fill = GridBagConstraints.BOTH; 
    gbc.weightx = 1; 
    gbc.weighty = 1; 
    add(scroll, gbc); 
} 

public class PalettePanel extends javax.swing.JPanel { 

    public PalettePanel() { 
     initComponents(); 
    } 

    private void initComponents() { 
     java.awt.GridBagConstraints gridBagConstraints; 

     lbl1 = new javax.swing.JLabel(); 
     scPnl1 = new javax.swing.JScrollPane(); 
     lbl2 = new javax.swing.JLabel(); 
     scPnl2 = new javax.swing.JScrollPane(); 
     lbl3 = new javax.swing.JLabel(); 
     scPnl3 = new javax.swing.JScrollPane(); 
     lblPadding = new javax.swing.JLabel(); 

     setLayout(new java.awt.GridBagLayout()); 

     gridBagConstraints = new java.awt.GridBagConstraints(); 
     gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 
     gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH; 
     gridBagConstraints.weightx = 1.0; 
     gridBagConstraints.insets = new java.awt.Insets(0, 3, 0, 3); 
     add(lbl1, gridBagConstraints); 

     scPnl1.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); 
     scPnl1.setMinimumSize(new java.awt.Dimension(60, 60)); 
     gridBagConstraints = new java.awt.GridBagConstraints(); 
     gridBagConstraints.gridx = 0; 
     gridBagConstraints.gridy = 1; 
     gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 
     gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH; 
     gridBagConstraints.weightx = 1.0; 
     gridBagConstraints.insets = new java.awt.Insets(0, 3, 0, 3); 
     add(scPnl1, gridBagConstraints); 

     gridBagConstraints = new java.awt.GridBagConstraints(); 
     gridBagConstraints.gridx = 0; 
     gridBagConstraints.gridy = 2; 
     gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 
     gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH; 
     gridBagConstraints.weightx = 1.0; 
     gridBagConstraints.insets = new java.awt.Insets(0, 2, 0, 2); 
     add(lbl2, gridBagConstraints); 

     scPnl2.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); 
     scPnl2.setMinimumSize(new java.awt.Dimension(60, 60)); 
     gridBagConstraints = new java.awt.GridBagConstraints(); 
     gridBagConstraints.gridx = 0; 
     gridBagConstraints.gridy = 3; 
     gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 
     gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH; 
     gridBagConstraints.weightx = 1.0; 
     gridBagConstraints.insets = new java.awt.Insets(0, 3, 0, 3); 
     add(scPnl2, gridBagConstraints); 

     gridBagConstraints = new java.awt.GridBagConstraints(); 
     gridBagConstraints.gridx = 0; 
     gridBagConstraints.gridy = 4; 
     gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 
     gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH; 
     gridBagConstraints.weightx = 1.0; 
     gridBagConstraints.insets = new java.awt.Insets(0, 3, 0, 3); 
     add(lbl3, gridBagConstraints); 

     scPnl3.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); 
     scPnl3.setMinimumSize(new java.awt.Dimension(60, 60)); 
     gridBagConstraints = new java.awt.GridBagConstraints(); 
     gridBagConstraints.gridx = 0; 
     gridBagConstraints.gridy = 5; 
     gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 
     gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH; 
     gridBagConstraints.weightx = 1.0; 
     gridBagConstraints.insets = new java.awt.Insets(0, 3, 0, 3); 
     add(scPnl3, gridBagConstraints); 
     gridBagConstraints = new java.awt.GridBagConstraints(); 
     gridBagConstraints.gridx = 0; 
     gridBagConstraints.gridy = 6; 
     gridBagConstraints.fill = java.awt.GridBagConstraints.VERTICAL; 
     gridBagConstraints.weighty = 1.0; 
     add(lblPadding, gridBagConstraints); 
    } 
} 

これは、私が使用している(多かれ少なかれ)ビジュアル部分のコードです。 add(scroll、gbc)をadd(fcp、gbc)に変更すると、サイズ変更は動作しますが、スクロールは動作しません。

アイデア?

+1

よりよいヘルプについては早く、 [MCVE]または[ショート、自己完結型、正しい例](http://www.sscce.org/)を投稿してください。 –

答えて

0

私はどんな副作用があるかどうJScrollPaneの内のJPanelにこれを追加すると、それは動作しますが、私は確認していないことが判明...(しかし私のために細かい動作します)

@Override 
public java.awt.Dimension getPreferredSize() { 

    int h = super.getPreferredSize().height; 
    int w = getParent().getSize().width; 
    return new java.awt.Dimension(w, h); 
} 
関連する問題