Вы можете получить ссылку на окно верхнего уровня, используя Window win = SwingUtilities.getWindowAncestor (myComponent);и переход в метод вызывает ссылку на любой компонент, который в конечном итоге содержит окно верхнего уровня.Если ваш основной класс также является вашим JFrame верхнего уровня (вы не инициализируете другие JFrames), то вы можете привести возвращенное Window к вашему типу класса верхнего уровня и вызвать его открытые методы.
Например:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class Foo1 {
public static void main(String[] args) {
MainApp mainApp = new MainApp();
mainApp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainApp.pack();
mainApp.setLocationRelativeTo(null);
mainApp.setVisible(true);
}
}
class MainApp extends JFrame {
public MainApp() {
getContentPane().add(new DrawingBoard());
}
public void mainAppMethod() {
System.out.println("This is being called from the Main App");
}
}
class DrawingBoard extends JPanel {
public DrawingBoard() {
JButton button = new JButton("Button");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
MainApp mainApp = (MainApp) SwingUtilities.getWindowAncestor(DrawingBoard.this);
mainApp.mainAppMethod();
}
});
add(button);
}
}
изменено по рекомендации свечения:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class Foo2 {
public static void main(String[] args) {
MainApp2 mainApp = new MainApp2();
mainApp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainApp.pack();
mainApp.setLocationRelativeTo(null);
mainApp.setVisible(true);
}
}
class MainApp2 extends JFrame {
public MainApp2() {
getContentPane().add(new DrawingBoard2(this));
}
public void mainAppMethod() {
System.out.println("This is being called from the Main App");
}
}
class DrawingBoard2 extends JPanel {
private MainApp2 mainApp;
public DrawingBoard2(final MainApp2 mainApp) {
this.mainApp = mainApp;
JButton button = new JButton("Button");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
buttonActonPerformed();
}
});
add(button);
}
private void buttonActonPerformed() {
mainApp.mainAppMethod();
}
}
Еще одна рекомендация: поскольку вы изучаете Swing, вам гораздо лучше не использовать NetBeans для генерации кода Swing для вас.а лучше кодировать свои приложения Swing вручную.Сделав это и изучив учебники, вы получите гораздо более глубокое и лучшее понимание того, как работает Swing, и это поможет вам, если вам нужно использовать генератор кода NetBeans для создания чего-то большего, чем самые простые приложения.