JLabels进入JFrame

时间:2012-10-15 16:03:42

标签: java swing

我是JAVA的新手,需要以下代码的帮助。我写过两节课。在一个我声明JFrame,在另一个JLabel。我想通过这种方法将Label添加到Frame中,但是我收到了一个错误。我应该做些什么改变才能使它发挥作用:

import java.awt.*;
import javax.swing.*;

public class test {

    public static void main (String[] args) {

        JLabel l1 = new JLabel("Label into Frame");
        Frame f1 = new Frame();
        f1.displayFrame.add(l1);
        f1.displayFrame();      
    }   
}

class Frame {

    void displayFrame() {

        JFrame frame = new JFrame("Test");
        frame.setVisible(true);
    }   
}

3 个答案:

答案 0 :(得分:3)

你无法像这样创建它。如果要构建自定义框架类,则必须将其定义为

public class MyFrame extends JFrame

获取所有JFrame方法等。在上面的代码中,您调用displayFrame,然后在尝试调用方法add时,这不会起作用。为了使它工作(以最简单的形式),试试这个:

public static void main(String[] args) {

    JLabel l1 = new JLabel("Label into Frame");
    JFrame f1 = new JFrame();
    f1.setSize(100, 100);
    f1.add(l1);
    f1.setVisible(true);
}

我建议你尝试阅读一些优秀的java教程来了解基础知识。

答案 1 :(得分:0)

- UI工作放在UI主题上,Non-UI工作在Non-UI主题上总是好的。

- 现在在Java GUI应用程序中,在main()中安排GUI的构建后,Event Dispatcher Thread方法不长期,它       退出,现在它的EDT负责处理GUI。

- 请勿在{{1​​}}上直接放置 JLable,尝试使用JFrame上的JPanel然后放置{ {1}}就可以了。

- 但只是为了保持简单我将不使用 JPanel。

<强>例如

JFrame

答案 2 :(得分:0)

方法displayFrame不会返回任何内容

void displayFrame() {...}

方法减速遵循 {accessibility} [type] [name({parameter {,parameter ...}})]

的模式

辅助功能定义了谁可以访问该方法,并包括publicprotectedprivatepackage-private

类型指的是此方法将返回的值的类型。一种特殊类型的void表示该方法不会返回值

名称是方法的名称,这是您识别方法并访问它的方式

参数是您要传递给方法的任意数量的可选值。

有了这些信息,让我们仔细看看这个方法。

void displayFrame() {...}

这就是说该方法是 package-private (这意味着该方法只能在同一个包中访问,但不能通过子类扩展)并且不会返回任何内容。 / p>

f1.displayFrame.add(l1);

因此,当您调用此方法时,Java无法弄清楚如何将ad(...)应用于任何内容,这没有任何意义。

更好的解决方案是提供 getter 方法来获取帧或从 displayFrame 方法返回帧。两者都有很好的论据,但我个人更喜欢 getters

public class test {

    public static void main (String[] args) {

        JLabel l1 = new JLabel("Label into Frame");
        Frame f1 = new Frame();
        JFRame myFrame = f1.getFrame();
        myFrame.add(l1);
        f1.displayFrame(); // there's actually no need for this 
    }   
}

class Frame {
    private JFrame frame = new JFrame("Test");

    public JFrame getFrame() {
        return frame;
    }

    void displayFrame() {
        frame.setVisible(true);
    }   
}

我会花时间阅读Learning the Java Language