2016-11-24 12 views
1

フレームを展開するときに、menuPanelのコンポーネントを展開する必要があります。 MenuPanelはGridBayLayoutを使用していますが、パネルの塗りつぶし値と重量値の両方で微妙に変化しましたが、フレームでコンポーネントのサイズを変更するようなことはありません。GridBagLayoutを使用してJPanelを強制的にJFrameでサイズ変更する方法

表示クラスにmenuPanelを追加する方法が間違っていると思われます。さらに、TanksApplicationにレイアウトを設定しようとしましたが、それもうまくいきませんでした。私は何か基本的なことを理解していない、と思う。

メインアプリ

public class TanksApplication extends JFrame{ 

     public TanksApplication(){ 
      super("Tanks"); 
     } 

     public static void main (String args[]){ 
      Display display = new Display(); 
      TanksApplication frame = new TanksApplication(); 
      frame.add(display); 
      frame.setSize(600,425); 
      frame.setVisible(true); 
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      frame.setLocationRelativeTo(null); 
     } 
    } 

Displayクラス

public class Display extends JPanel{  
    public Display(){ 
     menuPanel = new JPanel(new GridBagLayout()); 
     GridBagConstraints con = new GridBagConstraints(); 

     mainMenuImageP = new JPanel(); 
     mainMenuImageP.setBackground(Color.BLACK); 
     con.fill = GridBagConstraints.BOTH; 
     con.gridy = 0; 
     con.gridx = 0; 
     con.gridwidth = 2; 
     con.weightx = 0.5; 
     con.weighty = 0.5; 
     con.anchor = GridBagConstraints.CENTER; 
     con.ipadx = 400; 
     con.ipady = 300; 
     con.insets = new Insets(0,20,0,20); 
     menuPanel.add(mainMenuImageP, con); 

     newGameB = new JButton("New Game"); 
     con.fill = GridBagConstraints.HORIZONTAL; 
     con.gridy = 1; 
     con.gridx = 0; 
     con.gridwidth = 1; 
     con.weightx = 0.5; 
     con.weighty = 0.5; 
     con.anchor = GridBagConstraints.CENTER; 
     con.ipadx = 0; 
     con.ipady = 0; 
     con.insets = new Insets(10,10,10,10); 
     menuPanel.add(newGameB, con); 

     loadGameB = new JButton("Load Game"); 
     con.fill = GridBagConstraints.HORIZONTAL; 
     con.gridy = 1; 
     con.gridx = 1; 
     con.gridwidth = 1; 
     con.weightx = 0.5; 
     con.weighty = 0.5; 
     con.anchor = GridBagConstraints.CENTER; 
     con.ipadx = 0; 
     con.ipady = 0; 
     con.insets = new Insets(10,10,10,10); 
     menuPanel.add(loadGameB, con); 

     add(menuPanel); 
    } 

答えて

1

あなたの問題はあなたが表示JPanelのにmenuPanelを使用してのGridBagLayoutを追加しているということですが、後者はJPanelののデフォルトFlowLayoutのを使用しています。 FlowLayoutは、追加されたコンポーネントのサイズを変更しません。解決策:をmenuPanelのから取り除き、JPanelを表示するだけです。 GridBagLayoutを与え、それにコンポーネントを追加します。

ので、単にadd(...)に変更し、あなたがmenuPane.add(...);を持ってJPanel menuPanel = new JPanel();、どこを削除

setLayout(new GridBagLayout()); 

あなたの画面のコンストラクタ内持っています。

例えば、

public class Display extends JPanel{  
    public Display(){ 
     // !! menuPanel = new JPanel(new GridBagLayout()); 
     GridBagConstraints con = new GridBagConstraints(); 

     mainMenuImageP = new JPanel(); 
     mainMenuImageP.setBackground(Color.BLACK); 
     con.fill = GridBagConstraints.BOTH; 
     con.gridy = 0; 
     con.gridx = 0; 
     con.gridwidth = 2; 
     con.weightx = 0.5; 
     con.weighty = 0.5; 
     con.anchor = GridBagConstraints.CENTER; 
     con.ipadx = 400; 
     con.ipady = 300; 
     con.insets = new Insets(0,20,0,20); 
     // !! menuPanel.add(mainMenuImageP, con); 
     add(mainMenuImageP, con); // !! 

     newGameB = new JButton("New Game"); 
     con.fill = GridBagConstraints.HORIZONTAL; 
     con.gridy = 1; 
     con.gridx = 0; 
     con.gridwidth = 1; 
     con.weightx = 0.5; 
     con.weighty = 0.5; 
     con.anchor = GridBagConstraints.CENTER; 
     con.ipadx = 0; 
     con.ipady = 0; 
     con.insets = new Insets(10,10,10,10); 
     // !! menuPanel.add(newGameB, con); 
     add(newGameB, con); // !! 

     loadGameB = new JButton("Load Game"); 
     con.fill = GridBagConstraints.HORIZONTAL; 
     con.gridy = 1; 
     con.gridx = 1; 
     con.gridwidth = 1; 
     con.weightx = 0.5; 
     con.weighty = 0.5; 
     con.anchor = GridBagConstraints.CENTER; 
     con.ipadx = 0; 
     con.ipady = 0; 
     con.insets = new Insets(10,10,10,10); 
     // !! menuPanel.add(loadGameB, con); 
     add(loadGameB, con); // !! 

     // !! add(menuPanel); 
    } 

} 

注これが解決しない場合は、minimal example programまたはSSCCEを作成し、掲載を検討してくださいということ。

+0

これは素晴らしいアイデアです。ありがとうございます。私はそれを試してみましょう。私はDisplayがパネルであることを知らなかった、なぜ私がそれを考えなかったのか分からない。 – ulw1

+0

それはそれでした。再度、感謝します。 – ulw1

+0

@ ulw1:ようこそ。 menuPanelなどの内部JPanelを絶対に使用する必要がある場合は、DisplayPanelにBorderLayoutなどのコンポーネントpreferredSizesを変更するレイアウトを使用させたいとします。 –

関連する問題