簡體   English   中英

如何在屏幕上添加兩個組件而又不重疊卻只顯示一個組件?

[英]How can i add two components to my screen without them overlapping and only showing one?

現在,我只能在屏幕上顯示我的兩個組件中的一個,第二個組件總是與第一個組件重疊,因此第二個組件只能顯示。

我怎樣才能讓他們同時出現。

package Game;

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.io.IOException;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Amazing {

private final int width = 300;
private final int height = width / 16 * 9;
private int scale = 3;
private static Graphics g;

private static JFrame frame = new JFrame();

public Amazing(){
    Dimension size = new Dimension(width*scale, height*scale);
    frame.setPreferredSize(size);
    frame.setResizable(false);
    frame.setTitle("Amazing!");
    Character character = new Character(50,50,scale,width,height);
    Map map = new Map(scale, width, height);
    frame.add(map);
    frame.add(character);
    frame.pack();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
    character.requestFocus();
}

public static void main(String[] args){
    Amazing amazing = new Amazing();
}

}

我認為您不需要查看其他兩個類(如果您願意,我也可以發布它們),但是我認為您需要了解的所有信息是地圖類創建並使用paintComponent(Graphics g) 2隨機生成Character類創建並使用paintComponent(Graphics g)方法在屏幕上顯示和顯示圖像時顯示矩形。

由於未指定布局,因此使用的是BorderLayout,該布局在每個節中僅顯示1個組件。 除非使用默認的BorderLayout時將其他位置指定為附加arg,否則add(component)方法將“覆蓋”以前的內容。 因此,當您將第二個組件添加到框架時,它將覆蓋第一個組件。

我注意到您導入了GridLayout,但是我沒有在您的代碼中看到它。 如果在構造函數中添加如下語句:

this.setLayout(new GridLayout(4,2));

它將布局從默認的BorderLayout更改為GridLayout,並且您將有4行,每行2個隔離專區,可在其中放置組件。 調用add(component)方法將在下一個可用部分中添加一個組件,從第1行第1點開始。

如果您只想添加這兩項,請嘗試添加以下語句

this.setLayout(new GridLayout(1,2));

在添加組件之前。 這將使它們並排放置。

在Swing中向面板添加組件時,您應該為面板選擇一個LayoutManagerFlowLayout很簡單, GridBoxLayout靈活,但是還有更多)。 根據選擇的布局,您還可以將數據與組件相關聯,以告訴LayoutManager將組件放置在何處。

您遇到的“主要”問題是默認情況下JFrame使用BorderLayout BorderLayout將僅占據一個組件的五個可用位置中的每一個。 默認情況下, BorderLayout將組件放置在CENTER位置。

您應該探索另一個滿足您要求的布局管理器。

看看在容器布置組件

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM