我是编码的新手,我遇到了这个问题:我想在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(标签)并且它没有工作..:/
答案 0 :(得分:1)
简短的回答是,不要......有点......
您有两个基本选择,您可以允许Cat
为Map
提供所需信息,以决定应该向谁显示最佳信息,例如,使用返回图像的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中,所以我实例化了一个。
希望有所帮助