我如何将JLabel添加到另一个类的JFrame上?

时间:2015-10-14 03:17:53

标签: java swing jframe jpanel jlabel

我是编码的新手,我遇到了这个问题:我想在JLabel添加一个JFrame我在另一个类中创建。这是代码。我不明白如何正确地做到这一点,但我知道如果他们使用相同的方法怎么做。

地图:

import javax.swing.JFrame;

public class Map {

    public static void main(String[] args) {
        map();

    }

    private static void map() {
        JFrame window = new JFrame("Run Kitty Run!");
        window.setVisible(true);
        window.setSize(1000, 500);

    }

}

猫:

import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Cat 
{
    //instance variables
    ImageIcon pic;

    public Cat()
    {
        //constructor
        pic = new ImageIcon("/Users/dell/Desktop/runKittyRun/cat.png");

    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
    }

    public void draw()
    {
        JPanel panel = new JPanel();
        JLabel label = new JLabel(pic);
        panel.add(label);
        panel.setVisible(true);
    }

}

我尝试过做windows.add(标签)并且它没有工作..:/

2 个答案:

答案 0 :(得分:1)

简短的回答是,不要......有点......

您有两个基本选择,您可以允许CatMap提供所需信息,以决定应该向谁显示最佳信息,例如,使用返回图像的getter

或者,您可以设计Cat,以便轻松添加到Map

public class Cat extends JPanel
{
    //instance variables
    ImageIcon pic;

    public Cat()
    {
        //constructor
        // Absolute file references are a bad idea by the way
        pic = new ImageIcon("/Users/dell/Desktop/runKittyRun/cat.png");
        setLayout(new BorderLayout());
        JLabel label = new JLabel(pic);
        add(label);
    }

}

然后只需在需要时创建一个Cat实例,并将其添加到您想要的容器中......

import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class Map {

    public static void main(String[] args) {
        new Map();
    }

    private static void map() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new Cat());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }
}

答案 1 :(得分:0)

好的,这适用于任何变量或方法,而不仅仅是JLabel。让我们从调用这些方法methodOne和methodTwo开始。 methodOne将在一个名为One的类中(我不会写出类的主体,我是从我的iPod做的)

JLabel jl;
public void methodOne(){
    jl = // blah blah blah;
}

好的,现在你想在第二种方法中使用jl。所以这是做什么的:

public void methodTwo(){
    One o = new One();
    JFrame j = // instance of JFrame;
    j.add(o.jl);
}

记住:JLabel变量在Class One中,所以我实例化了一个。

希望有所帮助