Java 将JLabel添加到JPanel中的问题
我希望在JPanel上显示一个图像,但是当我运行代码时,面板是空白的。我尝试的方法是一个稍微修改过的版本 我已经确认代码中的所有方法实际上都是使用Java 将JLabel添加到JPanel中的问题,java,swing,Java,Swing,我希望在JPanel上显示一个图像,但是当我运行代码时,面板是空白的。我尝试的方法是一个稍微修改过的版本 我已经确认代码中的所有方法实际上都是使用println调用的。我的框架和面板是可见的,我相当确定我已经将图标和标签添加到了标签中。我错过了什么 我的代码的相关部分: public class SYSTEM public static void start() { GameFrame GF = new GameFrame(); GamePanel GP = new Game
println
调用的。我的框架和面板是可见的,我相当确定我已经将图标和标签添加到了标签中。我错过了什么
我的代码的相关部分:
public class SYSTEM
public static void start() {
GameFrame GF = new GameFrame();
GamePanel GP = new GamePanel();
GF.add(GP);
GP.loadSprite("Player", new Dimension(0,0));
}
}
public class GameFrame extends JFrame {
public GameFrame() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(SYSTEM.windowSize);
setVisible(true);
}
}
public class GamePanel extends JPanel {
ArrayList<Sprite> sprites = new ArrayList<Sprite>();
GamePanel() {
setVisible(true);
setSize(SYSTEM.windowSize);
setLayout(null);
}
public void loadSprite(String spriteName, Dimension pos) {
sprites.add(new Player());
add(sprites.get(0).getIcon());
}
public class Sprite {
protected JLabel icon;
protected BufferedImage image;
protected String filePath;
protected Dimension pos;
public JLabel getIcon() {
return icon;
}
}
public class Player extends Sprite {
public Player() {
filePath = "FILEPATH_OMITTED";
pos = new Dimension(0,0);
try {
image = ImageIO.read(new File(filePath));
} catch (IOException e) {
System.out.println(e);
}
icon = new JLabel(new ImageIcon(image));
}
}
公共类系统
公共静态void start(){
GameFrame GF=新游戏框架();
GamePanel GP=新GamePanel();
GF.add(GP);
总成loadSprite(“玩家”,新维度(0,0));
}
}
公共类游戏框架扩展了JFrame{
公共游戏框架(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
设置大小(SYSTEM.windowSize);
setVisible(真);
}
}
公共类游戏面板扩展了JPanel{
ArrayList精灵=新建ArrayList();
游戏面板(){
setVisible(真);
设置大小(SYSTEM.windowSize);
setLayout(空);
}
公共void loadSprite(字符串spriteName,维度位置){
添加(新玩家());
添加(sprites.get(0.getIcon());
}
公共级雪碧{
受保护的JLabel图标;
受保护的缓冲图像;
受保护的字符串文件路径;
保护尺寸位置;
公共JLabel getIcon(){
返回图标;
}
}
公共类玩家扩展精灵{
公共玩家(){
filePath=“filePath\u省略”;
pos=新尺寸(0,0);
试试{
image=ImageIO.read(新文件(filePath));
}捕获(IOE异常){
系统输出打印ln(e);
}
图标=新JLabel(新图像图标(图像));
}
}
不要在游戏中使用组件,您已经扔掉了负责确定组件大小和位置的布局管理器,但您没有对此进行补偿。我建议您使用自定义绘制方法,请参见和
我很清楚,您的问题与
setLayout(null)直接相关
这是不好的,不管你在做什么不要在游戏中使用组件,你已经扔掉了布局管理器,它负责确定组件的大小和位置,但是你没有补偿它。我建议你改为使用自定义绘制方法,请参见和
我很清楚,您的问题与
setLayout(null);
直接相关,无论您在做什么,这都是不好的这是您的文件:filePath=“filePath\u省略”;
?不是像path/image.png
?在使框架可见之前将面板添加到框架中。不要为JPanel使用空布局。路径可能是错误的,但我们不知道,因为您忽略了它:)替换System.out.println(e);
使用抛出新的运行时异常(e)
。如果无法加载映像,您不希望应用程序继续运行…对吗?这是您的文件:filePath=“filePath\u省略”;
?不是像path/image.png
?在使框架可见之前将面板添加到框架中。不要为JPanel使用空布局。路径可能是错误的,但我们不知道,因为您忽略了它:)替换System.out.println(e);
使用抛出新的运行时异常(e);
。如果无法加载映像,您不希望应用程序继续运行……对吗?