0

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

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);
    }   
}
4

3 回答 3

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 教程来了解基础知识。

于 2012-10-15T16:16:25.343 回答
0

-UI将工作保持在UI线程上总是好的,并且Non-UI在线程上工作Non-UI

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

- 不要直接将放在JLableJFrame,尝试在 上使用a JPanelJFrame然后JLable在其上放置a。

-但为了简单起见,我不会在这里使用JPanel。

例如:

class MyFrame extends JFrame {

    JLabel l1;

    public MyFrame() {

        this.setSize(400,400);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setComponent();
        setHandling();

    }   

    public void setComponent(){

    l1 = new JLabel("Label into Frame");
    this.add(l1);

    }

    public void setHandling(){

      // Use this to handle the Events on the EventSources.
    }

    public static void main(String[] args){

       EventQueue.invokeLater(new Runnable(){

         MyFrame frame = new MyFrame("Test");
        frame.setVisible(true);

       });

    }
}
于 2012-10-15T17:01:03.667 回答
0

方法 displayFrame 不返回任何内容

void displayFrame() {...}

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

访问性定义了谁可以访问该方法,包括public、、protectedprivatepackage-private

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

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

Parameter(s)是要传递给方法的任意数量的可选值。

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

void displayFrame() {...}

这就是说该方法是包私有的(这意味着该方法只能从同一个包中的 with 访问,但不能被子类扩展)并且不会返回任何内容。

f1.displayFrame.add(l1);

所以当你调用这个方法时,Java 无法弄清楚如何应用ad(...)到任何东西,这是没有意义的。

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

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);
    }   
}

我会花时间阅读学习 Java 语言

于 2012-10-15T19:16:00.637 回答