Frage

Ich habe eine JPanel Unterklasse, auf das ich buutons hinzufügen, Etiketten, Tabellen usw. am Bildschirm zeigen Ich benutze JFrame:

MainPanel mainPanel = new MainPanel(); //JPanel subclass

JFrame mainFrame = new JFrame();
mainFrame.setTitle("main window title");
mainFrame.getContentPane().add(mainPanel);
mainFrame.setLocation(100, 100);
mainFrame.pack();
mainFrame.setVisible(true);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Aber wenn ich das Fenster, die Größe der Panel-Größe nicht ändern. Wie Größe der Platte zu machen, das gleiche wie die Größe des Fensters zu sein, auch wenn es die Größe verändert wurde?

War es hilfreich?

Lösung

Sie können ein Layout-Manager wie Border gesetzt und dann definieren genauer gesagt, wo das Panel gehen sollte:

MainPanel mainPanel = new MainPanel();
JFrame mainFrame = new JFrame();
mainFrame.setLayout(new BorderLayout());
mainFrame.add(mainPanel, BorderLayout.CENTER);
mainFrame.pack();
mainFrame.setVisible(true);

Damit ist die Platte in den mittleren Bereich des Rahmens und lässt sie automatisch wachsen, wenn der Rahmen Größe ändern.

Andere Tipps

Sie benötigen einen Layout-Manager für die JFrame festlegen zu verwenden - Es handelt sich um, wie die Komponenten positioniert sind. Ein nützliches ist der Bordermanager.

Sie einfach die folgende Zeile von Code sollte Ihre Probleme beheben:

mainFrame.setLayout(new BorderLayout());

(Tun Sie dies, bevor Sie Komponenten zum JFrame hinzufügen)

Wenn die Border Option von unseren Freunden zur Verfügung gestellt Arbeit doesnot, versucht ComponentListerner zum JFrame hinzufügen und die componentResized (event) Methode implementieren. Wenn das JFrame Objekt der Größe verändert wird, wird diese Methode aufgerufen werden. Wenn Sie also das um den Code legen Sie die Größe des JPanel in dieser Methode schreiben, werden Sie das gewünschte Ergebnis erzielen.

Ya, ich weiß, diese ‚Lösung‘ ist nicht gut, aber es als Sicherheitsnetz verwenden. ;)

Aus meiner Erfahrung habe ich Gridlayout.

    thePanel.setLayout(new GridLayout(a,b,c,d));

a = Zeilennummer, b = Spaltennummer, c = Horizontaler Abstand d = vertikale Lücke.


Zum Beispiel, wenn ich will Panel erstellen mit:

  • unbegrenzte Reihe (set a = 0)
  • 1-Säule (set b = 1)
  • vertical gap = 3 (set d = 3)

Der Code ist unter:

    thePanel.setLayout(new GridLayout(0,1,0,3));

Diese Methode ist nützlich, wenn Sie JScrollPane zu Ihrer JPanel hinzufügen möchten. Größe der JPanel innerhalb JScrollPane automatisch ändert, wenn Sie einige Komponenten auf sich hinzufügen, so dass die JScrollPane automatisch die Bildlaufleiste zurück.

Wie andere Plakate gesagt haben, müssen Sie die Layoutmanager verwendet wird, ändern. Ich ziehe es immer ein Gridlayout verwenden, damit Ihr Code würde:

MainPanel mainPanel = new MainPanel();
JFrame mainFrame = new JFrame();
mainFrame.setLayout(new GridLayout());
mainFrame.pack();
mainFrame.setVisible(true);

Grid scheint grundsätzlich richtig zu mir, wenn Sie möchten, dass Ihre Platte den gesamten Bildschirm aufzunehmen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top