【问题标题】:Jlabel cannot be applied;reason: actual and formal argument list differ in length无法应用 Jlabel;原因:实际参数列表和形式参数列表的长度不同
【发布时间】:2020-05-20 01:10:11
【问题描述】:

我正在为即将到来的考试而学习,教授只给了我们这本书来学习,我目前正在学习,但是我在本书提供的 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

根据书的预期输出:

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

【问题讨论】:

  • 请学习常见的 Java 命名法(命名约定 - 例如EachWordUpperCaseClassfirstWordLowerCaseMethod()firstWordLowerCaseAttribute,除非它是 UPPER_CASE_CONSTANT)并始终如一地使用它。
  • 哦,谢谢你,我会记住这些术语的。但是很抱歉这个“UPPER_CASE_CONSTANT”什么时候会被使用?
  • 如果声明属性时使用final修饰符,则为常量。

标签: java swing compiler-errors jframe jlabel


【解决方案1】:

这里的问题是你已经调用了你的类 JLabel。然后编译器在编译时尝试使用这个类,而不是你的书期望它使用的 javax.swing.* 包中的 JLabel。

我们可以说是这种情况,因为在错误消息中它声明了required: no arguments。您实现的构造函数不带任何参数,并且您没有任何可用于参数String, int 的构造函数,因此编译器正在寻找一个不存在的构造函数。

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

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

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

import  javax.swing.*;

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

import  javax.swing.JLabel;

这会导入特定的类,有助于更清楚地了解哪些类正在被导入和使用。它还可以帮助您在代码中识别所使用的每个类的来源。

全面修复:

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

希望这会有所帮助!

【讨论】:

  • 哦,谢谢你甚至没有想到一个类名会破坏程序
猜你喜欢
  • 1970-01-01
  • 2014-04-06
  • 2019-08-10
  • 2021-11-06
  • 2023-03-25
  • 2016-05-31
  • 2018-05-08
  • 2013-10-04
  • 1970-01-01
相关资源
最近更新 更多