繁体   English   中英

JLabels到JFrame

[英]JLabels into JFrame

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

您不能像这样创建它。 如果要构建自定义框架类,则必须像

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

-它总是好的,以保持UI的工作UI线程, Non-UI的工作Non-UI线程。

-现在在Java GUI应用程序中, main()方法已经存在很长一段时间了,在Event Dispatcher Thread安排了GUI的构造之后,它退出了,现在EDT负责处理该GUI。

-不要直接放置 JLableJFrame ,请尝试使用JPanelJFrame ,然后将一个JLable就可以了。

-但为了简单起见,在这里我将不使用 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);

       });

    }
}

方法displayFrame不返回任何内容

void displayFrame() {...}

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

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

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

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

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

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

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语言》

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM