2016-04-18 15 views
0

私はGUIを学び、2つのパネルをフレームに並べて配置しようとしています。あなたに私のコードをすべて渡すことなく(それは課題のためです)誰も私に以下の理由がない理由を指摘できますか? (ControlPanelは表示されません)私はチュートリアルに従いましたが、どこが間違っているのか分かりません。JFrameに2つのパネルを追加する

JFrame frame = new JFrame("Software"); 
    MainPanel m = new MainPanel(); 
    ControlPanel c = new ControlPanel(frame); 

    frame.getContentPane().add(m, BorderLayout.WEST); 
    frame.getContentPane().add(c, BorderLayout.EAST); 



    public class MainPanel extends JPanel { 

    ....... 

    public MainPanel(){ 
    super(); 
    setPreferredSize(new Dimension(WIDTH, HEIGHT)); 
    setFocusable(true); 
    requestFocus(); 
    } 
} 

    public ControlPanel(JFrame frame) { 
    super(); 
    setPreferredSize(new Dimension(WIDTH, HEIGHT)); 
    setFocusable(true); 
    requestFocus(); 
    } 
} 

編集:コードの

レクリエーション:

JFrame frame = new JFrame("Software"); 
    MainPanel m = new MainPanel(); 
    ControlPanel c = new ControlPanel(frame); 
    frame.getContentPane().add(c, BorderLayout.WEST); 
    frame.getContentPane().add(m, BorderLayout.EAST); 
    frame.setLayout(new BorderLayout()); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setContentPane(m); 
    frame.pack(); 
    frame.setVisible(true); 
+0

機能しない理由のJFrameのcontentPaneでのレイアウトはそうthatsのJFlowLayoutを返しますか? – Hackerdarshi

+0

BorderLayoutなどのような意味ですか?私が持っている唯一のレイアウトは上記のとおりです。次に、コントロールパネルでboxlayoutを使っていくつかのボタンをレイアウトします。\t \t setLayout(new BoxLayout(this、BoxLayout.Y_AXIS)); – javapalava

+0

はい。私は – Hackerdarshi

答えて

4

あなたはBorderLayoutのにあなたのフレームのレイアウトを設定する必要があります。

はこれを使用する:あなたのフレームは、正確に2等分されている場合

frame.setlayout(new BorderLayout()); 

また、あなたはまた、グリッドレイアウトを使用することができます。あなたのコードで

frame.setLayout(new GrigLayout(1,2)); // If the panels are side-by-side. 

または

frame.setLayout(new GrigLayout(2,1)); //If the panels are vertically adjacent. 
+0

注:JSplitPane(JSplitPane.HORIZONTAL_SPLIT、a、b)も素晴らしいです – Exceptyon

+0

hmmm ...ありがとう@Hackerdashi、しかしまだ動作しません:(上記のコードをコピーします.... – javapalava

+0

これは、これに基づいて、以下の答え - ありがとう! – javapalava

4

、あなたはMainPanelのインスタンスでJFrameのコンテンツパネルを交換する:

JFrame frame = new JFrame("Software"); 
    MainPanel m = new MainPanel(); 
    ControlPanel c = new ControlPanel(frame); 
    frame.getContentPane().add(c, BorderLayout.WEST); 
    frame.getContentPane().add(m, BorderLayout.EAST); 
    frame.setLayout(new BorderLayout());// this has no use 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setContentPane(m);// here the content pane becomes the MainPanel 
    frame.pack(); 
    frame.setVisible(true); 

すでにコンテンツに物事を追加するように、それをリセットする必要はありません(また、setLayoutJFrameの代わりにコンテンツペインに移動しました)

JFrame frame = new JFrame("Software"); 
    MainPanel m = new MainPanel(); 
    ControlPanel c = new ControlPanel(frame); 
    frame.getContentPane().setLayout(new BorderLayout()); 
    frame.getContentPane().add(c, BorderLayout.WEST); 
    frame.getContentPane().add(m, BorderLayout.EAST); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.pack(); 
    frame.setVisible(true); 
+0

ありがとう@Berger!これは私に別の問題をもたらしました....私のメインパネルは、キーボード入力を受け取ります。メインパネルとコントロールパネルのrequestfocus()? – javapalava

+0

@javapalava:この問題に関するいくつかの詳細を添えて質問を編集することができますか、この問題の別の記事を投稿できますか? – Berger

+1

確かに私はウェブを最初にトラウリングしています私はこれに回らなければならない前にそれを理解することができます! – javapalava

2

チェックこの

JFrame frame = new JFrame("Software"); 
    MainPanel m = new MainPanel(); 
    ControlPanel c = new ControlPanel(frame); 
    //getContentPane layout to BorderLayout 
    frame.getContentPane().setLayout(new BorderLayout()); 
    frame.getContentPane().add(c, BorderLayout.WEST); 
    frame.getContentPane().add(m, BorderLayout.EAST); 

    //you don't need it for now 
    //frame.setLayout(new BorderLayout()); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    //frame.setContentPane(m); 
    frame.pack(); 
    frame.setVisible(true); 

編集:以下の部分は、あなたが使用しないレイアウト

.getContentPane().add(c, BorderLayout.WEST); 
frame.getContentPane().add(m, BorderLayout.EAST); 
関連する問題