2010-11-19 7 views
3

私は、行と呼ばれるJPanelを継承するクラスを持っています。私が行の束がJLabelに追加した、コードは以下の通りです:JPanelのサイズを設定する

JFrame f=new JFrame(); 

JPanel rowPanel = new JPanel(); 
//southReviewPanel.setPreferredSize(new Dimension(400,130)); 
rowPanel.setLayout(new BoxLayout(rowPanel, BoxLayout.Y_AXIS)); 
rowPanel.add(test1); 
rowPanel.add(test1); 
rowPanel.add(test2); 
rowPanel.add(test3); 
rowPanel.add(test4); 
rowPanel.setPreferredSize(new Dimension(600, 400)); 
rowPanel.setMaximumSize(rowPanel.getPreferredSize()); 
rowPanel.setMinimumSize(rowPanel.getPreferredSize()); 

f.setSize(new Dimension(300,600)); 

JScrollPane sp = new JScrollPane(rowPanel); 
sp.setSize(new Dimension(300,600)); 
f.add(sp); 

f.setVisible(true); 

test1のは...などの行です。しかし、私がウィンドウのサイズを変更すると、Rowのレイアウトはどうにか乱雑になります(それは同様にサイズ変更されます)...どうしてこれが起こるのを防ぐことができますか?

答えて

3

Using Layout ManagersのSwingチュートリアルを読んでください。各レイアウトマネージャには、コンテナのサイズ変更時に何が起こるかに関する独自のルールがあります。実験と遊び。あなたのSSCCEが問題を実証ポストより多くの助けが必要な場合は

childPanel.setMaximumSize(childPanel.getPreferredSize()); 

:BoxLayoutその場合

はあなたが行うことができますので、パネルに追加されたコンポーネントの最大サイズを尊重すべきです。

+0

上記のように私はgetPreferredSizeとsetMaximumSizeを使って変更しました(私の編集したコードを見てください)...それでもコードは存在しません。私は国境のレイアウトはどう?サイズを設定するにはどうすればいいですか? – aherlambang

+0

http://download.oracle.com/javase/tutorial/uiswing/layout/border.html – Cesar

+0

編集したコードはSSCCEではありません。はい、リンクはBorderLayoutに言及しません。 6分でセクション全体を読むことができる方法はありません!!!レイアウトマネージャは、パネル自体にではなく、パネルに追加されたコンポーネントで動作します。 – camickr

1

私はhttp://download.oracle.com/javase/tutorial/uiswing/examples/layout/BoxLayoutDemoProject/src/layout/BoxLayoutDemo.javaでコードを取って、あなただけの代わりにカスタムのJPanelのボタンを使用して、やろうとしているもので、それを適応:

public class BoxLayoutDemo { 
    public static void addComponentsToPane(Container pane) { 
     JPanel rowPanel = new JPanel(); 
     pane.add(rowPanel); 

     rowPanel.setLayout(new BoxLayout(rowPanel, BoxLayout.Y_AXIS)); 
     rowPanel.add(addAButton("Button 1")); 
     rowPanel.add(addAButton("Button 2")); 
     rowPanel.add(addAButton("Button 3")); 
     rowPanel.add(addAButton("Button 4")); 
     rowPanel.add(addAButton("5")); 
     rowPanel.setPreferredSize(new Dimension(600, 400)); 
     rowPanel.setMaximumSize(rowPanel.getPreferredSize()); 
     rowPanel.setMinimumSize(rowPanel.getPreferredSize()); 
    } 

    private static JButton addAButton(String text) { 
     JButton button = new JButton(text); 
     button.setAlignmentX(Component.CENTER_ALIGNMENT); 
     return button; 
    } 

    private static void createAndShowGUI() { 
     JFrame frame = new JFrame("BoxLayoutDemo"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     //Set up the content pane. 
     addComponentsToPane(frame.getContentPane()); 

     //Display the window. 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     javax.swing.SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       createAndShowGUI(); 
      } 
     }); 
    } 
} 

最終結果はこれです:あなたのよう alt text

見ることができます、ボタンの行は完全に整列しています。 JFrameのサイズを変更すると、それらは一直線に並んでいます。それはあなたが探しているものですか?

関連する問題