gpt4 book ai didi

Java - Swing - .this 在 JOptionPane 中的含义

转载 作者:搜寻专家 更新时间:2023-11-01 03:18:45 25 4
gpt4 key购买 nike

请考虑以下示例:

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。在这种情况下是父组件:A) button1 - 触发 Action 的按钮(我猜不是),B)对象(类的实例)ListenForButton,它包含名为 actionPerformed 的方法/函数,在这种特殊情况下,类的这个实例(这种类型的对象)称为 lForButton(我不确定,但这是真的),C) 它是在 main 中创建的对象——我们创建的窗口(此处:new JavaWindow()); ( 我觉得不行),D)其他答案???

最佳答案

问题 1:

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

总而言之,如果您想稍后使用它或与其他人不同,则只创建一个类的实例,在您的情况下,您不需要 new JavaWindow() 是有效的。

问题 2:

parentComponent 是您希望 JOptionPanel 出现的主要组件。在那种情况下就是您的 JFrame JavaWindow。它不仅仅是 this 并且是 JavaWindow.this 的原因是因为该语句位于内部类中,而 this 将引用该类。因此 JavaWindow.this 可以正确引用外部类 JavaWindow

关于Java - Swing - .this 在 JOptionPane 中的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38351063/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com