有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我看了几本教程,想知道为什么我的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);

    }

 }

共 (1) 个答案

  1. # 1 楼答案

    您只是创建了一个普通的JFrame:

    JFrame window = new JFrame();
    

    你永远不会创建new okay()对象。要明白,它不会通过魔法创造自己,如果你想让它显示出来,你必须在代码中这样做

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

    drawingComponent DC = new drawingComponent();
    

    因为你从来没有显示过类代码。此外,在添加所有组件之前,不应将JFrame设置为可见


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