Я очень новичок в разработке приложений 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
Создает экземпляр указанного подкласса Application, устанавливает свойство приложения ApplicationContext, а затем вызывает метод запуска нового приложения. Метод запуска обычно называют из основного приложения. Конструктор applicationClass и методы запуска запускаются в потоке диспетчеризации событий.
Так метод startup()
выполняется, и там создается и показать новый MainFrame
объект
2) Это код MainFrame (он расширяет классический Свинг 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
класс abstact). Вот документация для этого метода: shutdown doc
Чтение документации:
Сохранить состояние сеанса для иерархии компонентов коренится в мэйнфреймов.
Когда пользователь нажимает на JButton
, который объявлен внутри класса MainFrame
, Я хотел бы метод shutdown()
(который объявлен в классе GUI
) должны быть выполнены.
У вас есть решение проблемы с этим?
Спасибо
Andrea
Первое, что вам нужно, это MainFrame на самом деле знать о вашем объекте GUI. Для этого вам, вероятно, нужно передать объект GUI («this») в качестве аргумента в конструктор MainFrame, где вы можете сохранить его в поле в MainFrame. Затем вы можете использовать прослушиватель событий или другой метод для вызова метода выключения в экземпляре GUI MainFrame. – Domi