[英]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中向面板添加組件時,您應該為面板選擇一個LayoutManager
( FlowLayout
很簡單, GridBoxLayout
靈活,但是還有更多)。 根據選擇的布局,您還可以將數據與組件相關聯,以告訴LayoutManager
將組件放置在何處。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.