请考虑以下示例,请:

import javax.swing.*;
import java.awt.event.*;

public class JavaWindow extends JFrame {

JButton button1;

public static void main(String[]args)
{
     new JavaWindow();
     // or JavaWindow Mwindow = new JavaWindow(); Question 1

}

public JavaWindow()
{   //setting window parameters etc.
    this.setSize(500,500);
    this.setLocationRelativeTo(null);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setTitle("My window");
      JPanel thePanel = new JPanel();
      button1 = new JButton("Get answer");
      ListenForButton lForButton = new ListenForButton();
      button1.addActionListener(lForButton);
      thePanel.add(button1);
      this.add(thePanel);
      this.setVisible(true);



}

private class ListenForButton implements ActionListener
{

    public void actionPerformed(ActionEvent e) {
        if(e.getSource()==button1)
        {
        JOptionPane.showMessageDialog(JavaWindow.this, "Hello!"); //JavaWindow.this - Question 2
        }
    }

}

}

问题1:在Internet上的大多数示例中,创建一个对象是
应该是通过这种方式完成的“new JavaWindow();”但是不是吗
等同于在创建/创建对象时创建对象并同时命名它,但替换为“new JavaWindow();”例如“JavaWindow MyWindow = new JavaWindow();” ?

问题2:请考虑以下行:“JOptionPane.showMessageDialog(JavaWindow.this,” Hello!“);”。在这条线
JavaWindow.this应该是parentComponent。
在这种情况下,parentComponent是:
A)button1-触发动作的按钮(我想不是),
B)对象(类的实例)ListenForButton,其中包含名为actionPerformed的方法/函数,在这种特殊情况下,该类的实例(此类型的对象)称为lForButton(我不确定,但这是真的),
C)其在main中创建的对象-我们创建的窗口(在这里:new JavaWindow()); ( 我觉得不行),
D)其他答案???

最佳答案

问题1:
new JavaWindow();JavaWindow javaWindow = new JavaWindow();之间的区别在于,后者是在变量中存储JavaWindow类型的对象,通过这种方式,您可以使用该对象使用该类的方法和公共变量。您不能调用的第一个,只需调用类构造函数即可。好吧,您可以执行new JavaWindow().methodName(),但是例如,您将无法在要求JavaWindow类型的方法中将其作为参数提供。

总而言之,仅在要稍后使用或与其他类不同的情况下才创建类的实例,在这种情况下,仅new JavaWindow()无效。

问题2:
parentComponent是要JOptionPanel出现的主要组件。在这种情况下,您的JFrame就是JavaWindow。之所以不仅仅是thisJavaWindow.this是因为该语句在内部类内部,而this将引用该类。可以使用JavaWindow.this正确地引用外部类JavaWindow

07-25 22:53