Java 为什么我的JLabel不生成图像?

Java 为什么我的JLabel不生成图像?,java,swing,jframe,Java,Swing,Jframe,我看了几本教程,想知道为什么我的JLabel没有生成图像?我想我已经准备好了展示图像所需的一切。我的程序中的其他图形是否可能存在干扰?如果有多个图像在彼此的顶部,java是否使用自上而下的层系统来确定哪些图像在彼此的顶部 package scratch; import java.awt.Font; import javax.swing.*; import javax.swing.event.*; import java.awt.*; import java.awt.event.*; impor

我看了几本教程,想知道为什么我的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 window = new JFrame();
而且您永远不会创建一个
新的ok()
对象。要明白,它不会通过魔法自行创建,如果您想让它显示出来,就必须用代码来实现

顺便说一句,我不知道什么是
drawingComponent

drawingComponent DC = new drawingComponent();
因为你从不显示类代码。此外,在添加所有组件之前,不应将JFrame设置为可见


同时

  • 学习并遵循Java命名约定,因为这样做有助于其他人(我们!!)更好地理解您的代码。变量名都应该以小写字母开头,而类名应该以大写字母开头
  • 避免扩展JFrame。虽然这对于像这样的琐碎程序来说是可以的,但它不能很好地扩展,这意味着它会使代码变得更复杂,甚至在稍大或更复杂的程序中,它会把你画在角落里
  • 相反,让您的GUI面向创建JPanel,如果需要,可以将面板放置在JFrames中,或者JDialogs、JOptionPanes或其他JPanel中。这将使您的代码具有更大的灵活性
  • 同样,在添加所有初始组件之前,不要在JFrame上调用
    setVisible(true)
  • 是的,您最好使用
    ImageIO.read(…)
    将图像作为缓冲区获取图像,然后将其放入您的图像图标中。它更安全,并且(我认为)允许更好地缓存图像

我更新了主参数以调用new okay();这并没有产生一个图像still@howevermanyitakes:您正在创建一个OK对象,但仍然没有显示它。您在哪里调用
setVisible(true)
?为什么要创建它和一个单独的JFrame?摆脱JFrame,单独使用okay对象。将其指定给变量,然后将其设置为可见。另外,您的Java命名方案(类名以小写字母开头)表明,虽然您可能已经阅读了一些Swing教程,但还没有阅读一些Java教程的介绍,这是一种倒退。首先从基础开始,因为它们是Swing和所有其他Java编码所必需的。据我所知,
ImageIcon
在无法加载图像时不会产生异常。因此,请尝试使用
newImageIcon(ImageIO.read(..)
。您知道什么是实例吗?