簡體   English   中英

如何對齊 JPanel 在另一個 JPanel 下方居中?

[英]How do I align a JPanel centered underneath another JPanel?

你好

我正在使用以下 GUI。

import javax.swing.*;
import java.awt.*;

public class gui{
    public static void main(String[] args) {
        //Neues Fenster mainFrame
        JFrame mainFrame = new JFrame("Lernjournal");

        //Schliessen des Fensters ermöglichen
        mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //mainFrame Fenstergrösse
        mainFrame.setSize(1280,720);

        //MenuBar erstellen
        JMenuBar menu = new JMenuBar();

        //Dropdown menu erstellen
        JMenu menu1 = new JMenu("Datei");
        JMenuItem neu = new JMenuItem("Neu");
        JMenuItem speichern = new JMenuItem("Speichern");
        JMenuItem eintrag = new JMenuItem("Einträge");

        //Einfügen der Menus
        menu.add(menu1);
        menu1.add(neu);
        menu1.add(speichern);
        menu1.add(eintrag);

        //Neues Panel erstellen
        JPanel panel1 = new JPanel();
        JPanel panel2 = new JPanel();
        //Titel und Textfeld für Titel
        JLabel titel = new JLabel("Titel: ");
        JTextField titelInput = new JTextField(30);

        //Titel und Textfeld für das Ziel
        JLabel ziel = new JLabel("Zielvorstellung: ");
        JTextArea zielInput = new JTextArea(3,30);

        //JPanels dem JFrame hinzufügen
        mainFrame.getContentPane().add(BorderLayout.PAGE_START, menu);
        mainFrame.getContentPane().add(BorderLayout.NORTH, panel1);
        mainFrame.getContentPane().add(BorderLayout.CENTER, panel2);
        panel1.add(titel);
        panel1.add(titelInput);
        panel2.add(ziel);
        panel2.add(zielInput);

        mainFrame.setVisible(true);
    }
}

panel1包含titeltitelInput 目前,我將 panel1 的BorderLayout.NORTH設置為BorderLayout ,將panel1 panel2BorderLayout.CENTER以查看是否可以同時看到兩者(實際上不是)。

據我所知, panel2覆蓋panel1 ,因為即使有兩個 JPanel, BorderLayout始終位於 JFrame 的中心。

我嘗試使用FlowLayout但無法達到預期的結果。

如果兩個 BorderLayouts 都居中,這就是 GUI。 面板 2 覆蓋面板 1

我想要實現的是兩個 JPanel 都顯示在彼此下方。

提前致謝。

編輯

我最終改用Box.createVerticalBox() Function 並更改了一些小東西。

    import javax.swing.*;
import java.awt.*;
import java.sql.*;


public class gui{
    public static void main(String[] args) throws SQLException {

        //Neues Fenster mainFrame
        JFrame mainFrame = new JFrame("Lernjournal");

        //Schliessen des Fensters ermöglichen
        mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //mainFrame Fenstergrösse
        mainFrame.setSize(1280,720);

        //MenuBar erstellen
        JMenuBar menu = new JMenuBar();

        //Dropdown menu erstellen
        JMenu menu1 = new JMenu("Datei");
        JMenuItem neu = new JMenuItem("Neu");
        JMenuItem eintrag = new JMenuItem("Einträge");

        //Einfügen der Menus
        menu.add(menu1);
        menu1.add(neu);
        menu1.add(eintrag);

        //Neues Panel und neue Box erstellen
        Box box = Box.createVerticalBox();
        JPanel panel1 = new JPanel();
        panel1.add(box);
        
        //Titel und Textfeld für Titel
        JLabel titel = new JLabel("Titel");
        JTextField titelInput = new JTextField(30);

        //Titel und Textfeld für das Ziel
        JLabel ziel = new JLabel("Zielvorstellung");
        JTextArea zielInput = new JTextArea(3,30);

        //JPanels dem JFrame hinzufügen
        mainFrame.setJMenuBar(menu);
        mainFrame.getContentPane().add(BorderLayout.NORTH, panel1);

        //Box füllen
        box.add(titel);
        box.add(titelInput);
        box.add(ziel);
        box.add(zielInput);

        mainFrame.setVisible(true);
    }
}

您的代碼中的以下更改可能會為您提供所需的 output。

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;

import net.miginfocom.swing.MigLayout;

public class gui{
  public static void main(String[] args) {
      //Neues Fenster mainFrame
      JFrame mainFrame = new JFrame("Lernjournal");

      //Schliessen des Fensters ermöglichen
      mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

      //mainFrame Fenstergrösse
      mainFrame.setSize(1280,720);

      //MenuBar erstellen
      JMenuBar menu = new JMenuBar();

      //Dropdown menu erstellen
      JMenu menu1 = new JMenu("Datei");
      JMenuItem neu = new JMenuItem("Neu");
      JMenuItem speichern = new JMenuItem("Speichern");
      JMenuItem eintrag = new JMenuItem("Einträge");

      //Einfügen der Menus
      menu.add(menu1);
      menu1.add(neu);
      menu1.add(speichern);
      menu1.add(eintrag);

      //Neues Panel erstellen
      JPanel panel1 = new JPanel();
      JPanel panel2 = new JPanel();
      //Titel und Textfeld für Titel
      JLabel titel = new JLabel("Titel: ");
      JTextField titelInput = new JTextField(30);

      //Titel und Textfeld für das Ziel
      JLabel ziel = new JLabel("Zielvorstellung: ");
      JTextArea zielInput = new JTextArea(3,30);

      //JPanels dem JFrame hinzufügen
      //mainFrame.getContentPane().add(BorderLayout.PAGE_START, menu);
      //mainFrame.getContentPane().add(BorderLayout.NORTH, panel1);
      //mainFrame.getContentPane().add(BorderLayout.CENTER, panel2);
      panel1.add(titel);
      panel1.add(titelInput);
      panel2.add(ziel);
      panel2.add(zielInput);
      
      mainFrame.setLayout(new MigLayout());// Set layout

      // Add components
      mainFrame.add(menu, "north, w 100%");
      mainFrame.add(panel1, "center, wrap");
      mainFrame.add(panel2, "center");
      

      mainFrame.setVisible(true);
  }
}

您可以從這里下載依賴庫(miglayout15-swing.jar)

這是評論中提供的解決方案

使用 setJMenuBar 方法將 JMenuBar 添加到 JFrame 菜單欄。 然后將您的 JPanel 添加到 NORTH 和 CENTER。 ——吉爾伯特·勒布朗

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM