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

时间:2015-01-05 03:17:09

标签: 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);

    }

 }

1 个答案:

答案 0 :(得分:6)

你只是在创建一个简单的香草JFrame:

JFrame window = new JFrame();

并且您永远不会创建new okay()对象。要知道它不会通过魔法创造自己,如果你想要它显示,你必须在代码中这样做。

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

drawingComponent DC = new drawingComponent();

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


  • 学习并遵循Java命名约定,这样做可以帮助其他人(我们!! )更好地理解您的代码。变量名都应以小写字母开头,而类名以大写字母开头。
  • 避免扩展JFrame。虽然这对于诸如此类的琐碎程序来说可能没问题,但它不能很好地扩展,这意味着它会使您的代码变得更加复杂,并且即使是稍大或更复杂的程序也会让您陷入困境。
  • 而是将GUI设置为创建JPanels,然后根据需要放置在JFrame中的面板,或JDialogs,或JOptionPanes或其他JPanels。这将为您的代码提供更大的灵活性。
  • 同样,在添加所有初始组件之前,请勿在JFrame上调用setVisible(true)
  • 是的,您最好使用ImageIO.read(...)将图像作为BufferedImage,然后将其放入ImageIcon。它更安全一些(我认为)可以更好地缓存图像。