gpt4 book ai didi

java - 如何从另一个类执行一个类的方法?

转载 作者:行者123 更新时间:2023-12-02 06:32:17 27 4
gpt4 key购买 nike

我是 Java Swing 开发的新手,我遇到以下问题:

我有这个 GUI 类,其中包含 main() 方法:

package com.test.login3;

import org.jdesktop.application.SingleFrameApplication;


public class GUI extends SingleFrameApplication {

public static void main(String[] args) {
launch(GUI.class, args);
}

@Override
protected void startup() {
// TODO Auto-generated method stub
System.out.println("GUIBis ---> startUp()");
MainFrame mainFrame = new MainFrame();
mainFrame.setVisible(true);

}

@Override
protected void shutdown() {
System.out.println("Entered into GUI ---> shutdown()");
}

}

正如您在此类中看到的,有一个 main() 方法仅执行此操作:

launch(GUI.class, args);

阅读官方文档:launch doc

Creates an instance of the specified Application subclass, sets the ApplicationContext application property, and then calls the new Application's startup method. The launch method is typically called from the Application's main. The applicationClass constructor and startup methods run on the event dispatching thread.

因此,执行 startup() 方法,并创建并显示一个新的 MainFrame 对象

2) 这是 MainFrame 代码(它扩展了经典的 Swing JFrame):

package com.test.login3;

import java.awt.Dimension;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

import com.test.login.LoginFrame;

import net.miginfocom.swing.MigLayout;


public class MainFrame extends JFrame {

private static final int FIXED_WIDTH = 1000;
private static final Dimension INITAL_SIZE = new Dimension(FIXED_WIDTH, 620);

public MainFrame() {
super();

setPreferredSize(INITAL_SIZE);
setResizable(false);

setTitle("My Application");
setLayout(new MigLayout("fill"));

JButton logOutButton = new JButton("LogOut");

logOutButton.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e)
{
// Execute when button is pressed:
System.out.println("You clicked the button");

}
});

add(logOutButton);

pack();
setLocationRelativeTo(null); // Center the window

}


}

我的问题是这样的:

正如您在 GUI.java 类中看到的,定义了 shutdown() 方法(在 SingleFrameApplication 抽象中定义)类(class))。以下是此方法的文档:shutdown doc

阅读文档:

Save session state for the component hierarchy rooted by the mainFrame.

当用户单击在 MainFrame 类中声明的 JButton 时,我想要 shutdown() 方法(即声明到要执行的 GUI 类中)。

您有实现此行为的解决方案吗?

谢谢

安德里亚

最佳答案

您可以使用 PropertyChanges。让 GUI 实现 PropertyChangeListener。然后让 MainFrame 在单击按钮时触发属性更改。在 GUI 中,捕获此属性更改并执行关闭命令。请参阅this example了解更多信息。

类似于:

在类 GUI 中:

public class GUI extends SingleFrameApplication implements PropertyChangeListener {

...

MainFrame mainFrame = new MainFrame();
mainFrame.addPropertyChangeListener(this);

...

@Override
public void propertyChange(PropertyChangeEvent arg0) {
if (arg0.getPropertyName().equals("buttonClicked")) {
shutdown();
}
}

然后在主机中

       public void actionPerformed(ActionEvent e)
{
// Execute when button is pressed:
System.out.println("You clicked the button");
firePropertyChange("buttonClicked", false, true);
}

关于java - 如何从另一个类执行一个类的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19958640/

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