首页 > 解决方案 > 如何对齐 JPanel 在另一个 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包含titeltitelInputBorderLayout目前,我正在设置panel1toBorderLayout.NORTHpanel2toBorderLayout.CENTER以查看是否可以同时看到两者(事实并非如此)。

据我所知,即使有两个 JPanel ,panel2覆盖也是panel1因为始终以 JFrame 为中心。BorderLayout

我尝试使用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);
    }
}

标签: javaswinguser-interfaceawt

解决方案


您的代码中的以下更改可能会为您提供所需的输出。

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)


推荐阅读