2016-04-18 9 views
0

Ich lerne GUIs und versuche, zwei Panels nebeneinander in einem Frame zu platzieren. Ohne Ihnen meinen ganzen Code zu geben (es ist für eine Aufgabe) kann mir jemand irgendwelche Hinweise geben, warum das Folgende nicht funktioniert? (ControlPanel zeigt einfach nicht an) Ich folgte den Tutorials, kann aber nicht sehen, wo ich falsch liege?Hinzufügen von zwei Panels zu einem JFrame

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(); 
    } 
} 

Edit:

Übriges Code:

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

Welches Layout verwenden Sie? – Hackerdarshi

+0

Sie meinen wie BorderLayout etc? Das einzige Layout, das ich habe, ist wie oben, und dann benutze ich ein Boxlayout im ControlPanel, um einige Buttons auszulegen. \t \t setLayout (neues BoxLayout (this, BoxLayout.Y_AXIS)); – javapalava

+0

Ja. Ich meine das – Hackerdarshi

Antwort

4

Sie müssen das Layout Ihres Rahmens Border einzustellen.

verwenden:

frame.setlayout(new BorderLayout()); 

Außerdem, wenn Ihr Rahmen in genau zwei gleiche Hälften geteilt ist, können Sie auch ein Gridlayout verwenden.

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

oder

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

hinweis: rahmen in zwei geteilt, JSplitPane (JSplitPane.HORIZONTAL_SPLIT, a, b) ist auch nett – Exceptyon

+0

hmmm ... danke @Hackerdashi, aber immer noch nicht funktioniert :(Wird mehr code in oben kopieren .... – javapalava

+0

basierend auf diesem, und die folgende Antwort - vielen Dank! – javapalava

4

In Ihrem Code, den Sie ersetzen den Inhalt Platte des JFrame mit Ihrer Instanz von MainPanel:

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); 

So wie Sie bereits Dinge zum Inhalt hinzufügen Bereich, es gibt keine Notwendigkeit, es zurückzusetzen (auch, bewegte ich die setLayout in den Inhaltsbereich anstelle der JFrame)

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

Danke @Berger! Dies hat mich zu einem anderen Problem geführt .... Meine Hauptanzeige, nimmt Tastatureingabe.Das funktioniert jetzt nicht :(Könnte das sein, weil ich requestfocus() für Hauptpanel, AND Control Panel? – javapalava

+0

@javapalava: Könnten Sie Ihre Frage mit einigen Details zu diesem Thema bearbeiten, oder einen anderen mit diesem Problem posten? – Berger

+1

Sure :) Ich bin gerade im Internet surfen, um zu sehen, ob ich kann es selbst herausfinden, bevor ich mich dazu wenden muss! – javapalava

2

prüft diese

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); 

bearbeiten: Layout von ContentPane von JFrame JFlowLayout kehrt so ist, warum der folgende Teil nicht

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