java - 如何对齐 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
包含titel
和titelInput
。BorderLayout
目前,我正在设置panel1
toBorderLayout.NORTH
和panel2
toBorderLayout.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);
}
}
解决方案
您的代码中的以下更改可能会为您提供所需的输出。
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)