[英]JPanel not showing when added to another JPanel
我正在嘗試用Java創建游戲-該游戲將是2D滾動游戲。 我有一個名為CornPanel的類,該類擴展了JPanel
並顯示了玉米植物CornPanel
的內容將在屏幕上移動。 我知道CornPanel
類正在工作,因為將其直接添加到JFrame
時會顯示出來。 但是,當我嘗試將CornPanel
添加到另一個JPanel
並將該JPanel
添加到JFrame時, CornPanel
不會顯示。
這是我的CornPanel
類(縮寫-我拿出了我確定不會引起問題的東西):
package game;
import java.awt.Graphics;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JPanel;
public class CornPanel extends JPanel{
BufferedImage cornImage;
public CornPanel(){
loadImages();
}
public void loadImages(){
try{
cornImage = ImageIO.read(new File("src\\cornBasic.png"));
} catch(IOException e){
e.printStackTrace();
}
}
protected void paintComponent(Graphics g){
g.drawImage(cornImage, 0, 0, cornImage.getWidth(), cornImage.getHeight(), this);
}
}
我的游戲課:
package game;
import java.awt.Color;
import java.awt.Graphics;
import java.util.ArrayList;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Game extends JFrame{
ArrayList<CornPanel> cornPanels;
JPanel gameContainer;
public Game(){
cornPanels = new ArrayList<CornPanel>();
gameContainer = new JPanel();
setSize(1000, 1000);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBackground(new Color(98, 249, 255));
setExtendedState(JFrame.MAXIMIZED_BOTH);
getContentPane().add(gameContainer);
addCornPanel();
setVisible(true);
}
public void addCornPanel(){
CornPanel cornPanel = new CornPanel();
cornPanels.add(cornPanel);
gameContainer.add(cornPanel);
cornPanel.setVisible(true);
getContentPane().repaint();
repaint();
}
public static void main(String[] args) {
Game game = new Game();
}
}
注意:我通過將JFrame
和gameContainer
的LayoutManager設置為new GridLayout(1,1)
來使其工作,但是問題是我不能在CornPanel上使用setLocation()
使其動畫。 如果有沒有setLocation()
的方法,請告訴我。 另外,我花了很多我認為對於診斷問題沒有必要的代碼-希望我沒有花太多。
您的玉米面板未指定首選大小,因此布局管理器可能只是將其設置為0x0。
有一種將圖標添加到窗格中的簡便方法。 JLabel :: JLabel(Icon)將創建一個標簽,該標簽具有指定的圖像圖標,並且具有合適的尺寸來容納它。
如果確實需要比單個圖像更復雜的東西,則您的JComponent實現應重寫getPreferredSize()。
您還應該在jframe上調用“ pack”,以便它可以確定理想的顯示尺寸。
其他一些與您的原始問題無關的評論:
我知道
CornPanel
類正在工作,因為將其直接添加到JFrame
時會顯示出來。 但是,當我嘗試將CornPanel
添加到另一個JPanel
並將該JPanel
添加到JFrame
,CornPanel
不會顯示。
框架的內容窗格的布局為BorderLayout
,默認約束為CENTER
,它將拉伸組件以填充空間。
面板的默認布局是FlowLayout
,它不會拉伸組件以使其適合。
解決此問題的最佳方法是(首先)重寫CornPanel
的getPreferredSize()
方法以返回合理的大小,然后將其添加到布局/約束中,該布局/約束在其空間超過所需空間時具有所需的行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.