[英]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.NORTH
設置為BorderLayout
,將panel1
panel2
為BorderLayout.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.