如何将一个 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
包含 titel
和 titelInput
。目前,我正在将 panel1
的 BorderLayout
设置为 BorderLayout.NORTH
并将 panel2
设置为 BorderLayout.CENTER
以查看是否可以同时看到两者(这不是).
据我所知,panel2
覆盖了 panel1
,因为 BorderLayout
始终位于 JFrame 的中心,即使有两个 JPanel。
我尝试使用 FlowLayout
但无法达到预期的结果。
This is the GUI if both BorderLayouts are centered. panel2 covers panel1
我想要实现的是两个 JPanel 都在彼此下方居中显示。
提前致谢。
编辑
我最终改用 Box.createVerticalBox()
函数并更改了一些小东西。
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);
}
}
您可以从here
下载依赖库(miglayout15-swing.jar)
这是评论中提供的解决方案
您使用 setJMenuBar 方法将 JMenuBar 添加到 JFrame 菜单栏。然后将您的 JPanel 添加到 NORTH 和 CENTER。 – 吉尔伯特·勒布朗
我正在使用以下 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
。目前,我正在将 panel1
的 BorderLayout
设置为 BorderLayout.NORTH
并将 panel2
设置为 BorderLayout.CENTER
以查看是否可以同时看到两者(这不是).
据我所知,panel2
覆盖了 panel1
,因为 BorderLayout
始终位于 JFrame 的中心,即使有两个 JPanel。
我尝试使用 FlowLayout
但无法达到预期的结果。
This is the GUI if both BorderLayouts are centered. panel2 covers panel1
我想要实现的是两个 JPanel 都在彼此下方居中显示。
提前致谢。
编辑
我最终改用 Box.createVerticalBox()
函数并更改了一些小东西。
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);
}
}
您可以从here
下载依赖库(miglayout15-swing.jar)这是评论中提供的解决方案
您使用 setJMenuBar 方法将 JMenuBar 添加到 JFrame 菜单栏。然后将您的 JPanel 添加到 NORTH 和 CENTER。 – 吉尔伯特·勒布朗