无法显示 ImageIcon
Can't Get ImageIcon to Display
我看过很多其他问题,其中人们遇到的问题与我在这里遇到的问题类似(大多数解决方案都是通过简单的错误找到的)但我终究无法弄清楚为什么我的图形不会显示在我的 jframe 中。我是 Java 图形方面的新手,因此非常感谢能获得的所有帮助。 (如果有人认为这是一个重复的问题,我只要求你等我得到答案后再关闭它)
哦,另外,当我 运行 程序时,它告诉我调用了重绘方法,如果这对某些方面有帮助的话
package game.try5;
import java.awt.Dimension;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Window {
public Window() {
JFrame frame = new JFrame("Epic Game");
frame.setSize(800,600);
frame.setLocationRelativeTo(null);
frame.setLayout(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
GamePanel panel = new GamePanel();
frame.add(panel);
frame.setVisible(true);
}
public static void main(String[] args){
Window window = new Window();
}
}
.
package game.try5;
import java.awt.Graphics;
import javax.swing.JPanel;
public class GamePanel extends JPanel{
GameObject go = new GameObject(0,0,false,"Dog.jpg");
public GamePanel(){
repaint();
System.out.println("Repaint method called");
}
public void paintComponent(Graphics g){
super.paintComponent(g);
g.drawImage(go.getImg().getImage(), go.getxLoc(), go.getyLoc(), 50, 50, null);
System.out.println("Graphics method called");
}
}
.
package game.try5;
import java.awt.Dimension;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Window {
public Window() {
JFrame frame = new JFrame("Epic Game");
frame.setSize(800,600);
frame.setLocationRelativeTo(null);
frame.setLayout(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
GamePanel panel = new GamePanel();
frame.add(panel);
frame.setVisible(true);
}
public static void main(String[] args){
Window window = new Window();
}
}
注释掉 frame.setLayout(null);
,您很可能会看到游戏。
JFrame
的默认布局目前是 BorderLayout
- 在没有约束的情况下添加到
BorderLayout
的对象默认为 CENTER
。
BorderLayout
的 CENTER
中的对象被拉伸到可用的宽度和高度。
- 由于代码调用
frame.setSize(800,600);
可用宽度和高度为 800x600 像素减去框架装饰。
更好的全面方法是:
- 让自定义绘制的组件覆盖
getPreferredSize()
为 return 一个合理的值。
- 将组件添加到容器中。
- 最后,打包顶层window。这将使框架成为显示内容所需的最小尺寸。
我看过很多其他问题,其中人们遇到的问题与我在这里遇到的问题类似(大多数解决方案都是通过简单的错误找到的)但我终究无法弄清楚为什么我的图形不会显示在我的 jframe 中。我是 Java 图形方面的新手,因此非常感谢能获得的所有帮助。 (如果有人认为这是一个重复的问题,我只要求你等我得到答案后再关闭它)
哦,另外,当我 运行 程序时,它告诉我调用了重绘方法,如果这对某些方面有帮助的话
package game.try5;
import java.awt.Dimension;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Window {
public Window() {
JFrame frame = new JFrame("Epic Game");
frame.setSize(800,600);
frame.setLocationRelativeTo(null);
frame.setLayout(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
GamePanel panel = new GamePanel();
frame.add(panel);
frame.setVisible(true);
}
public static void main(String[] args){
Window window = new Window();
}
}
.
package game.try5;
import java.awt.Graphics;
import javax.swing.JPanel;
public class GamePanel extends JPanel{
GameObject go = new GameObject(0,0,false,"Dog.jpg");
public GamePanel(){
repaint();
System.out.println("Repaint method called");
}
public void paintComponent(Graphics g){
super.paintComponent(g);
g.drawImage(go.getImg().getImage(), go.getxLoc(), go.getyLoc(), 50, 50, null);
System.out.println("Graphics method called");
}
}
.
package game.try5;
import java.awt.Dimension;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Window {
public Window() {
JFrame frame = new JFrame("Epic Game");
frame.setSize(800,600);
frame.setLocationRelativeTo(null);
frame.setLayout(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
GamePanel panel = new GamePanel();
frame.add(panel);
frame.setVisible(true);
}
public static void main(String[] args){
Window window = new Window();
}
}
注释掉 frame.setLayout(null);
,您很可能会看到游戏。
JFrame
的默认布局目前是BorderLayout
- 在没有约束的情况下添加到
BorderLayout
的对象默认为CENTER
。 BorderLayout
的CENTER
中的对象被拉伸到可用的宽度和高度。- 由于代码调用
frame.setSize(800,600);
可用宽度和高度为 800x600 像素减去框架装饰。
更好的全面方法是:
- 让自定义绘制的组件覆盖
getPreferredSize()
为 return 一个合理的值。 - 将组件添加到容器中。
- 最后,打包顶层window。这将使框架成为显示内容所需的最小尺寸。