2011-06-27 15 views
4

私はSwingのJPanelをベースにしたカスタムGUIコンパイルを持っています。このコンポーネントは、BorderLayoutを使用するJFrameに配置されます。フレームのサイズを変更すると、このコンポーネントのサイズは変更されません。どうすればこれを避けることができますか?私は何が起こっても、コンポーネントが同じサイズを保つことを望みます。私はsetSize、setPreferredSize、setMinimumSizeを試してみましたが、成功しませんでした。スイングコンポーネント - レイアウトのサイズ変更を無効にする

ありがとうございます!

M

+1

多くのレイアウトでは、レイアウトマネージャのサイズの制御が失われます。 – MByD

+1

"何が起きても同じサイズのコンポーネントを保持したい" hmmm JScrollPaneにJPanelを追加して、MinimumSize – mKorbel

答えて

6

あなたは、いくつかのオプションがあります。

  • は、より洗練されたのLayoutManagerを使用してコンポーネント

  • のサイズを変更しませんLayoutManagerとインナーパネル内のコンポーネントをBorderLayoutより。 GridBagLayoutのような私のように見えるあなたのニーズに適しています。第1の溶液の

例:

import java.awt.*; 
import javax.swing.*; 

public class FrameTestBase extends JFrame { 

    public static void main(String args[]) { 
     FrameTestBase t = new FrameTestBase(); 

     JPanel mainPanel = new JPanel(new BorderLayout()); 

     // Create some component 
     JLabel l = new JLabel("hello world"); 
     l.setOpaque(true); 
     l.setBackground(Color.RED); 

     JPanel extraPanel = new JPanel(new FlowLayout()); 
     l.setPreferredSize(new Dimension(100, 100)); 
     extraPanel.setBackground(Color.GREEN); 

     // Instead of adding l to the mainPanel (BorderLayout), 
     // add it to the extra panel 
     extraPanel.add(l); 

     // Now add the extra panel instead of l 
     mainPanel.add(extraPanel, BorderLayout.CENTER); 

     t.setContentPane(mainPanel); 

     t.setDefaultCloseOperation(EXIT_ON_CLOSE); 
     t.setSize(400, 200); 
     t.setVisible(true); 
    } 
} 

結果:BorderLayout.CENTERに入れ

enter image description here

緑色成分、赤色成分が好ましいサイズを維持します。

+0

のあなたのコメントを削除しました。ありがとうございます! – mre

+0

あなたが言ったように、別のLayoutManagerがMin/Maxサイズを受け入れるのが良いと言いましたが、実際にはSetSizeの使い方が間違っていて、追加コードを削除してください。 – mKorbel

+1

@little bunny foo foo、問題ありません。記録のために、10k +ユーザは削除された投稿を見ることができるので、削除する前にこのコメントを自分の回答の下に置くことができます。 – aioobe

0
//this will restrict size on fix size, what ever size you will define for panel like 
//panel.setSize(400,400); 


    panel.setMaximumSize(panel.getSize()); 
    panel..setMinimumSize(panel.getSize()); 
+2

私は引用して、 "問題のコンポーネントがBorderLayout.CENTERに置かれている場合、それは動作しません。コンポーネントはそれらの値に関係なくサイズが変更されます。" :) – mre

+0

+1。それは自分自身ではうまくいきませんでした。 – aioobe

+0

ああ、今私は理解している、私は境界線レイアウトセンターに直接コンポーネントを使用したり追加したりしないことを好むが、flowlayoutのような他のレイアウトで新しいJPanelを作成し、新しく作成されたフローレイアウトにそのコンポーネントを追加し、パネルをborderlayoutパネルの中央に配置すると、borderlayoutパネル内のコンポーネントのサイズは変更されません。 – jalil

0

カスタムレイアウトマネージャを使用している場合は、GridBagLayoutのにあなたの現在のレイアウトを変更し、その変更戻ってあなたの最初のレイアウトにそれた後、NONEにオプションを埋める変更。

関連する問題