为什么我的 JLabel 没有生成图像?
why is my JLabel not producing an image?
我已经阅读了几个教程并且想知道为什么我的 JLabel 没有生成图像?我以为我已经拥有了显示图像所需的一切。我程序中的其他图形是否可能会干扰?如果有多个图像彼此重叠,是否有任何自上而下的图层系统 java 用于确定哪些图像彼此重叠?
package scratch;
import java.awt.Font;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.Graphics;
import java.awt.Rectangle;
import javax.swing.JFrame;
import javax.swing.JLabel;
//import statements
//Check if window closes automatically. Otherwise add suitable code
public class okay extends JFrame {
JPanel jp = new JPanel();
JLabel jl = new JLabel();
public okay(){
jl.setIcon(new ImageIcon("C:\Users\ShawnK\Desktop\cat.png"));
jp.add(jl);
add(jp);
validate();
}
public static void main(String args[]) {
JFrame window = new JFrame();
okay t1 = new okay();
window.setSize(640,800);
window.setTitle("lets do this");
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );
window.setVisible(true);
drawingComponent DC = new drawingComponent();
ai enemy = new ai();
window.add(DC);
window.add(t1);
}
}
您只是在创建一个普通的 JFrame:
JFrame window = new JFrame();
而且您永远不会创建 new okay()
对象。了解它不会通过魔法创建自己,如果你想显示它,你必须在代码中执行此操作。
顺便说一句,我不知道 drawingComponent
是什么:
drawingComponent DC = new drawingComponent();
因为您从不显示 class 代码。此外,在添加 所有 组件之前,您不应该将 JFrame 设置为可见。
还有
- 学习并遵循 Java 命名约定,因为这样做会帮助其他人(我们!!)更好地理解您的代码。变量名称应全部以小写字母开头,而 class 名称应以大写字母开头。
- 避免扩展 JFrame。虽然这对于像这样的小程序来说可能没问题,但它不能很好地扩展,这意味着它会使您的代码更加复杂,并使您在更大或更复杂的程序中陷入困境。
- 而是将您的 GUI 用于创建 JPanel,如果需要可以将面板放置在 JFrames 中,或者 JDialogs、JOptionPanes 或其他 JPanel。这将为您的代码提供更大的灵活性。
- 同样,在添加所有初始组件之前,不要对 JFrame 调用
setVisible(true)
。
- 是的,您最好使用
ImageIO.read(...)
将图像作为 BufferedImage 获取,然后将其放入您的 ImageIcon 中。它更安全一些(我 认为 )允许更好地缓存图像。
我已经阅读了几个教程并且想知道为什么我的 JLabel 没有生成图像?我以为我已经拥有了显示图像所需的一切。我程序中的其他图形是否可能会干扰?如果有多个图像彼此重叠,是否有任何自上而下的图层系统 java 用于确定哪些图像彼此重叠?
package scratch;
import java.awt.Font;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.Graphics;
import java.awt.Rectangle;
import javax.swing.JFrame;
import javax.swing.JLabel;
//import statements
//Check if window closes automatically. Otherwise add suitable code
public class okay extends JFrame {
JPanel jp = new JPanel();
JLabel jl = new JLabel();
public okay(){
jl.setIcon(new ImageIcon("C:\Users\ShawnK\Desktop\cat.png"));
jp.add(jl);
add(jp);
validate();
}
public static void main(String args[]) {
JFrame window = new JFrame();
okay t1 = new okay();
window.setSize(640,800);
window.setTitle("lets do this");
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );
window.setVisible(true);
drawingComponent DC = new drawingComponent();
ai enemy = new ai();
window.add(DC);
window.add(t1);
}
}
您只是在创建一个普通的 JFrame:
JFrame window = new JFrame();
而且您永远不会创建 new okay()
对象。了解它不会通过魔法创建自己,如果你想显示它,你必须在代码中执行此操作。
顺便说一句,我不知道 drawingComponent
是什么:
drawingComponent DC = new drawingComponent();
因为您从不显示 class 代码。此外,在添加 所有 组件之前,您不应该将 JFrame 设置为可见。
还有
- 学习并遵循 Java 命名约定,因为这样做会帮助其他人(我们!!)更好地理解您的代码。变量名称应全部以小写字母开头,而 class 名称应以大写字母开头。
- 避免扩展 JFrame。虽然这对于像这样的小程序来说可能没问题,但它不能很好地扩展,这意味着它会使您的代码更加复杂,并使您在更大或更复杂的程序中陷入困境。
- 而是将您的 GUI 用于创建 JPanel,如果需要可以将面板放置在 JFrames 中,或者 JDialogs、JOptionPanes 或其他 JPanel。这将为您的代码提供更大的灵活性。
- 同样,在添加所有初始组件之前,不要对 JFrame 调用
setVisible(true)
。 - 是的,您最好使用
ImageIO.read(...)
将图像作为 BufferedImage 获取,然后将其放入您的 ImageIcon 中。它更安全一些(我 认为 )允许更好地缓存图像。