【发布时间】:2025-12-31 16:15:11
【问题描述】:
我正在尝试用 Java 创建一个游戏 - 该游戏将是一个 2-D 滚动游戏。我有一个名为 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() 的情况下做到这一点,请告诉我。另外,我取出了很多我认为对诊断问题没有必要的代码——希望我没有取出太多。
【问题讨论】:
-
添加cornPanel后是否尝试使用revalidate()方法>?
标签: java swing jpanel layout-manager