当前位置: 首页 > 知识库问答 >
问题:

将JButtons添加到具有相同名称但不同的面板中。为什么?(Java)(Swing)

傅奕
2023-03-14
for (i = 0; i < 10; i++) {
        JButton button = new JButton("Record " + String.valueOf(i + 1));
        button.setAlignmentX(Component.CENTER_ALIGNMENT);
        listOfButtons.add(button);

    }
for (int i = 0; i < 10; i++) {
        panel.add(listOfButtons.get(i));
    }

在此背景下;我的问题是为什么以及如何使用相同的名称创建唯一的按钮对象是合法的:button。我总是这样理解对象创建:当程序员创建一个与另一个引用变量同名的新对象引用变量时,新引用变量将指向内存中不同的单个对象。

共有1个答案

薛经艺
2023-03-14

引用按钮的作用域是for主体。在每次迭代中,引用都是一个新的引用,因此部分JButton按钮。您还在创建新对象,因此new JButton(...)。您还可以让新引用指向同一行中新创建的对象,因此使用=(赋值操作符)。

我们只讨论重复引用声明,而不是赋值或对象创建。

这是违法的:

JButton button;
JButton button;
{
    JButton button;
    {
        JButton button;
    }
}
{
    JButton button;
}

{
    JButton button;
}
 类似资料:
  • 问题内容: 以下代码可以正常工作。在两个不同的结构上操作并打印该结构的字段的两种方法: 在控制台中显示所需的输出: 现在 ,如果我以以下方式更改方法签名,则会出现编译错误。我只是将方法的接收者移动到方法的参数: 我什至无法编译程序: 问 :为什么 当 方法具有相同的名称和Arity 时 ,我可以在接收器中互换结构类型,而不能在参数中互换结构类型? 问题答案: 因为Go不支持在其参数类型上重载用户定

  • 问题内容: 我在这里已经读到,在Java中,具有相同名称但不同类型的两个变量可以在同一范围内共存。我的意思是这个 但是所有的Java IDE都不允许这样的代码。我想知道这样的代码在语法上是否正确,或者只是IDE不允许这样的代码防止歧义。 无论如何,这是网站的摘录 “如果幸运的话,您也许能够重新编译Jad的输出。 但是,Java VM对于变量命名的规则比Java语言本身更为宽松。例如,一个有效的类文

  • 但所有java IDE都不允许这样的代码。我想知道这样的代码在语法上是否真的正确,或者只是IDE不允许这样的代码来防止歧义。 总之,这里是从网站上摘录的 “如果你幸运的话,你也许可以重新编译JAD的输出。然而,Java VM对变量命名的规则比Java语言本身更宽松。例如,一个有效的类文件可以有几个名为'a'的变量,只要它们有不同的类型。如果你反编译这样的类,你得到的源代码将是无效的。 JAD通常会

  • 问题内容: 我有一个名为的文件temp.java。我写了下面的代码。为什么这样做? 为什么这不起作用? 问题答案: 在第一个示例中,您的类实际上被声明为“包私有”(没有修饰符),这意味着只有同一包中的类才能访问它。在第二个示例中,您已将其声明为public。 在这种情况下,编译器已经很好地满足了JLS。 JLS指出: 当程序包存储在文件系统中时(第7.2.1节),如果在文件中找不到由类型名加类型组

  • 问题内容: 我有一个Animal类和一个名为AnimalExtension的Animal扩展。 这两个类之间的唯一区别是AnimalExtension还有另一个实例变量叫做animalId。Animal没有此实例变量。 我也有自己的数据类型,想要对XML进行封送处理。此数据类型称为AnimalList。在AnimalList内,有一个Animals列表作为实例变量。 animalList可以包含A

  • 我在一次面试中被问到以下问题: 问题:名称和签名相同但返回类型不同的方法。他问我,可能吗?这种类型叫什么。 有人能告诉我以下情况吗: > 上面的事情在任何情况下都是可能的(至少像一个在基类中,一个在派生类中?)如果是,是什么类型?比如编译或运行时多态? 在编译时多态性中,如果方法的返回类型与签名也不同,该怎么办?但只有函数的名称是相同的。还是编译时多态性吗? 在重写中,如果我有不同的返回类型,但方