【发布时间】:2021-06-28 09:52:31
【问题描述】:
你好
我正在处理以下 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,因为即使有两个 JPanel,BorderLayout 始终位于 JFrame 的中心。
我尝试使用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);
}
}
【问题讨论】:
-
我不确定所需的布局是什么。要将
JPanel居中在父级中,请使用GridBagLayout作为父级,没有任何约束。只需new JPanel(new GridBagLayout()) -
使用 setJMenuBar 方法将 JMenuBar 添加到 JFrame 菜单栏。然后将您的 JPanel 添加到 NORTH 和 CENTER。
-
如果我这样做,面板将彼此并排。我的目标是让一个人低于另一个人。
-
无视我的评论。在尝试某些操作后,我忘记将
ziel和zielImput添加回panel2。你的工作正常,谢谢! @GilbertLeBlanc -
您能否将您的答案发布为评论,以便我可以接受它作为解决方案@GilbertLeBlanc?
标签: java swing user-interface awt