为什么我的JLabel没有生成图像?

how*_*kes -1 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.*;
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);

    }

 }
Run Code Online (Sandbox Code Playgroud)

Hov*_*els 6

你只是创建一个普通的香草JFrame:

JFrame window = new JFrame();
Run Code Online (Sandbox Code Playgroud)

而你永远不会创建一个new okay()对象.理解它不会通过魔法创建自己,如果你想要它显示,你必须在代码中这样做.

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

drawingComponent DC = new drawingComponent();
Run Code Online (Sandbox Code Playgroud)

因为你永远不会显示类代码.此外,在添加所有组件之前,不应将JFrame设置为可见.


  • 学习并遵循Java命名约定,这样做有助于其他人(我们!!)更好地理解您的代码.变量名都应以小写字母开头,而类名以大写字母开头.
  • 避免扩展JFrame.虽然这可能是微不足道的程序确定,如这一点,它不能很好地扩展,这意味着它使你的代码更加复杂和油漆您在角落里,甚至稍微更大或更复杂的程序.
  • 相反,齿轮你的GUI的朝着建立JPanels,面板是那么如果需要,可以放置在JFrames,或JDialogs,或JOptionPanes,或其他JPanels.这将为您的代码提供更大的灵活性.
  • 同样,setVisible(true)在添加所有初始组件之前,不要调用JFrame.
  • 是的,您最好将图像作为BufferedImage使用ImageIO.read(...),然后将其放入ImageIcon中.它更安全一些(我认为)可以更好地缓存图像.