我正在嘗試將 JPanel 放在或放在 JPanel 上,無論情況如何,最終我只希望它像這樣作業

正如你在圖片上看到的,紅線是一個 JFrame,里面有 2 個 JPanel,在綠色 JPanel 上有一些不同的 JPanel。
我需要有關綠色 JPanel 和其中的小 JPanel 的幫助。有沒有辦法讓它像這樣作業?
任何幫助將不勝感激!
==============編輯1==============
所以這里有一些代碼,向您展示到目前為止我在@hfontanez 的幫助下所做的作業。
import javax.swing.*;
import java.awt.*;
import java.io.IOException;
public class Main
{
public static void main(String[] args)
{
//JFrame
JFrame jframe = new JFrame();
jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jframe.setSize(1920, 1080);
jframe.setResizable(false);
jframe.setLocationRelativeTo(null);
jframe.setVisible(true);
//parentJpanel - This is the main panel
JPanel parentJpanel = new JPanel();
parentJpanel.setBackground(Color.YELLOW);
parentJpanel.setSize(1920, 1080);
parentJpanel.setLayout(new BorderLayout());
//smallPanel - This is the little panel on the bottom
JPanel smallPanel = new JPanel();
smallPanel.setBackground(Color.GREEN);
smallPanel.setSize(1920, 300);
smallPanel.setLocation(0, 780);
smallPanel.setLayout(new BoxLayout(smallPanel, BoxLayout.PAGE_AXIS));
parentJpanel.add(smallPanel);
jframe.add(parentJpanel);
}
}

我原以為頂部是黃色的,底部的小部分是綠色的,但整個東西都變成了綠色。我做錯了什么?
uj5u.com熱心網友回復:

圖中的 GUI 是使用三個面板創建的。
- 該
YELLOW面板是游戲試玩區。它沒有布局,沒有組件(定義自己的首選尺寸)并且是自定義繪制的,因此它定義了一個合理的首選尺寸以報告給布局管理器。 - 該
GREEN面板包含控制元件。它使用一個FlowLayout. - 所述
RED面板使用BorderLayout,并提出了YELLOW在面板CENTER和GREEN在該面板PAGE_END。
代碼
這是制作上面看到的螢屏截圖的代碼。
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import java.awt.*;
public class GameLayout {
GameLayout() {
// The main GUI. Everything else is added to this panel
JPanel gui = new JPanel(new BorderLayout(5, 5));
gui.setBorder(new EmptyBorder(4, 4, 4, 4));
gui.setBackground(Color.RED);
// The custom painted area - it is a panel that defines its preferred size.
gui.add(new GamePanel());
JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.LEADING));
buttonPanel.setBackground(Color.GREEN);
for (int ii = 1; ii<5; ii ) {
buttonPanel.add(new JButton("B " ii));
}
gui.add(buttonPanel,BorderLayout.PAGE_END);
JFrame f = new JFrame("Game Layout");
f.setContentPane(gui);
f.setLocationByPlatform(true);
f.pack();
f.setVisible(true);
}
public static void main(String[] args) {
Runnable r = () -> new GameLayout();
SwingUtilities.invokeLater(r);
}
}
class GamePanel extends JPanel {
GamePanel() {
setBackground(Color.YELLOW);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(400, 100);
}
}
uj5u.com熱心網友回復:
你需要使用a,LayoutManager所以當你把它JPanel放在另一個里面時,JPanel它會有正確的外觀。如果您只是將面板放在其他面板中,則父 JPanel 將使用其默認布局管理器,即FlowLayout.
從外觀上看,您似乎需要為父(黃色)面板使用邊框布局。對于綠色,您有多種選擇,但我認為最好的辦法是使用帶有PAGE_AXIS組件方向的Box Layout。
通常,您需要熟悉兩件事:1) 布局管理器及其行為方式,以及 2) JComponents 的默認布局行為。
uj5u.com熱心網友回復:
似乎您想自己計算組件的位置和大小,并且對 LayoutManager 執行他的作業并調整大小和重新定位您的組件感到困惑。
因此,您可以嘗試關閉 LayoutManager 并自己進行定位 - 它記錄在此處:https : //docs.oracle.com/javase/tutorial/uiswing/layout/none.html
旁注:您正在應用的結構是父 JPanel 內的 JPanel。您也可以并排放置兩個 JPanel - 如果您只是將另一個 JPanel 子項添加到您的父 JPanel,就會發生這種情況。如果一個組件有多個在螢屏位置相互重疊的子組件,則順序對于渲染很重要(Z 順序)。
在您的情況下,我會在 JFrame 的內容窗格上使用BorderLayout,然后在中心區域添加游戲的主面板(雞巴飛過空間的地方)和南部區域的綠色面板。綠色面板可以使用FlowLayout來簡單地從左到右呈現它的子面板。
這會將您計算坐標的作業限制在游戲玩法而不是 UI 上。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/363037.html
