2017-09-03 12 views
0

homeWindowFrameという名前のJFrameを作成し、サイズを(600、500)に設定した後、mainContainerPanelという名前のJPanelをJFrameに追加しました。私はJPanelに新しいサイズを設定しましたが、動作しません。 JPanelのサイズは、更新する代わりにJFrameのサイズと同じです。 JFrameでJPanelにサイズを設定するにはどうすればいいですか。事前に感謝します。ここに私のコード:JPanelがコンテナのサイズを継承しないようにする方法

/** * メインウィンドウの建設 */

JFrame homeWindowFrame = new JFrame("Home - Crime File Management System"); 

    if (isInvalidLogin) { 
     homeWindowFrame.setSize(600, 500); 

    } else { 
     homeWindowFrame.setSize(600, 400); 
    } 

    homeWindowFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    homeWindowFrame.setLocation((screenSize.width/2) - (homeWindowFrame.getWidth()/2), (screenSize.height/2) - (homeWindowFrame.getHeight()/2)); 


    /** 
    * Main panel construction 
    */ 
    JPanel mainContainerPanel; 

    if (isInvalidLogin) { 
     mainContainerPanel = new JPanel(new GridLayout(4, 2)); 

    } else { 
     mainContainerPanel = new JPanel(new GridLayout(3, 2)); 
    } 

    homeWindowFrame.add(mainContainerPanel); 
+1

1)は、より幅と高さで、ASCIIアートまたは最小サイズでGUIの*意図されたレイアウトの単純な図面を提供し、そして - 余分なスペースをどのように使用すべきかを示します。 2) 'homeWindowFrame.setLocation(..'は 'setLocationRelativeTo(null)'で置き換えることができますが、画面の中央に何かを置くとスプラッシュ画面のように見えます。詳細は[この回答]を参照してください(https://stackoverflow.com/questions/7143287/how-to-best-position-swing-guis/7143398#7143398) –

+0

回答を編集する(コード) –

答えて

1

あなたのコードはどのようにJavaのSwingのレイアウトマネージャの仕事を無視しているように見えます。 JPanelをJFrameに追加すると、デフォルトのレイアウトはBorderLayoutになります。これにより、フレームがパネルの中央に配置され、枠に収まるようにサイズが設定されます。異なるサイズのパネルを使いたい場合は、preferredSizeを何とか設定する必要があり、JPanelを保持するコンテナは別のレイアウトマネージャを使用する必要があります。例えば、これがあなたの望むものであれば、「デフォルト」の方法で使用されるGridBagLayout(1つのコンポーネントを追加し、GridBagConstraintsはありません)は、JPanelを中央に配置します。これらの提案が役に立たない場合は、後で独自のMCVEを作成する必要があります(このリンクをお読みください)。例えば

MY MCVE:サイズ変更可能な場合

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.GridBagLayout; 
import javax.swing.*; 

@SuppressWarnings("serial") 
public class DiffSizedPanel extends JPanel { 
    private static final int PANEL_W = 400; 
    private static final int PANEL_H = 300; 
    private static final int FRAME_W = 600; 
    private static final int FRAME_H = 500; 
    private static final Color BG_COLOR = Color.PINK; 

    public DiffSizedPanel() { 
     setBackground(BG_COLOR); 

     // set the JPanel the preferred size desired 
     setPreferredSize(new Dimension(PANEL_W, PANEL_H)); 
     setBorder(BorderFactory.createTitledBorder("This is the JPanel")); 
    } 

    private static void createAndShowGui() { 
     JFrame frame = new JFrame("Different Sized Panel"); 

     // set the JFrame the preferred size desired 
     frame.setPreferredSize(new Dimension(FRAME_W, FRAME_H)); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     // change the content pane's layout from default BorderLayout to GridBagLayout 
     frame.getContentPane().setLayout(new GridBagLayout()); 
     frame.getContentPane().add(new DiffSizedPanel()); // add the JPanel 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(() -> createAndShowGui()); 
    } 
} 
+0

ありがとうございます、それは働いていますGridBagレイアウトで –

関連する問題