无法应用 Jlabel;原因:实际参数列表和形式参数列表的长度不同

Jlabel cannot be applied;reason: actual and formal argument list differ in length

我正在为即将到来的考试而学习,教授只给了我们这本书来学习,到目前为止我正在学习,但是我在本书提供的 Jlabel 代码上遇到了错误

代码:

import javax.swing.*;
import java.awt.*;
public class JLabel extends JFrame
{
    private int Width = 400;
    private int Height = 300;

    private JLabel LengthL, WidthL, AreaL, PerimeterL;

    public JLabel()
    {
        setTitle("Area and Perimeter of a Rectangle");

        LengthL = new JLabel("Enter the length: ", SwingConstants.RIGHT);
        WidthL = new JLabel("Enter the width: ", SwingConstants.RIGHT);
        AreaL = new JLabel("Area: ", SwingConstants.RIGHT);
        PerimeterL = new JLabel("Perimeter: ", SwingConstants.RIGHT);

        Container Pane = getContentPane();
        Pane.setLayout(new GridLayout(4,1));

        Pane.add(LengthL);
        Pane.add(WidthL);
        Pane.add(AreaL);
        Pane.add(PerimeterL);

        setSize(Width, Height);
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

    }

    public static void main(String [] args)
    {
        JLabel JL = new JLabel();
    }
}

错误:

Constructor Jlabel in class JLabel cannot be applied to given types;
required: no arguments
found: java.lang.String, int
reason: actual and formal argument list differ in length

书上的预期输出:

对于初学者的问题,我很抱歉,我正在查看此示例代码,但似乎找不到错误

这里的问题是您调用了 class JLabel。然后,编译器在编译时尝试使用此 class,而不是在您的书期望它使用的 javax.swing.* 包中找到的 JLabel。

我们可以判断是这种情况,因为在错误消息中它指出 required: no arguments。您实现的构造函数不接受任何参数,并且您没有任何可用参数 String, int 的构造函数,因此编译器正在寻找不存在的构造函数。

要解决这个问题,只需将 class 的名称更改为其他名称(例如 LabelTest 或 MyLabel 等)。

编译器现在将使用 java.swing 中的 JLabel class,它有几个不同的可用构造函数,包括本书期望它使用的构造函数。

关于通常被认为是好的做法的快速说明: 导入时,你应该只导入你需要的 classes 而不是整个包,所以

import  javax.swing.*;

正在导入整个 javax.swing 包,而实际上您只需要其中的几个 classes。相反,您应该尝试使用:

import  javax.swing.JLabel;

这会导入特定的 class 并有助于更清楚地说明正在导入和使用哪些 classes。它还可以帮助您在代码中识别每个正在使用的 class 的来源。

给出完整修复:

import java.awt.Container;
import java.awt.GridLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;

public class LabelTest extends JFrame
{
    private int Width = 400;
    private int Height = 300;

    private JLabel LengthL, WidthL, AreaL, PerimeterL;

    public LabelTest()
    {
        setTitle("Area and Perimeter of a Rectangle");

        LengthL = new JLabel("Enter the length: ", SwingConstants.RIGHT);
        WidthL = new JLabel("Enter the width: ", SwingConstants.RIGHT);
        AreaL = new JLabel("Area: ", SwingConstants.RIGHT);
        PerimeterL = new JLabel("Perimeter: ", SwingConstants.RIGHT);

        Container Pane = getContentPane();
        Pane.setLayout(new GridLayout(4,1));

        Pane.add(LengthL);
        Pane.add(WidthL);
        Pane.add(AreaL);
        Pane.add(PerimeterL);

        setSize(Width, Height);
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

    }

    public static void main(String [] args)
    {
        LabelTest JL = new LabelTest();
    }
}

希望对您有所帮助!