Если вы хотите вызвать метод для объекта из другого объекта, вам понадобится ссылка на первый объект, чтобы вы могли вызывать метод для самого активного объекта, а не для класса (как вы сейчас пытаюсь сделать). Один из способов решить эту проблему - передать ссылку на класс, содержащий JPanels, в класс, содержащий код прослушивателя действия кнопки, возможно, в конструкторе последней. Другими словами, вы захотите передать ссылку на текущий активный и визуализированный объект MainForm в класс, который имеет ActionListener для кнопки.
Кстати, вы меняете JPanels с помощью CardLayout? Если нет, я предлагаю вам изучить это, поскольку это обычно самый простой способ сделать это.
Edit:
Например, скажем, у вас есть класс с именем MainForm, у которого есть открытый метод swapJPanels, который позволяет менять местами представления, и другой класс MyPanel с вашим JButton, который хочет вызвать метод из класса MainForm, тогда вы можете дать MyPanel - конструктор, который принимает параметр MainForm и позволяет передавать ссылку из текущего объекта MainForm (внутри класса) в объект MyPanel:
MainForm:
class MainForm extends JFrame {
public MainForm() {
MyPanel myPanel = new MyPanel(this); // pass "this" or the current MainForm reference to MyPanel
}
public void swapJPanels(int panelNumber) {
}
}
MyPanel:
class MyPanel extends JPanel {
private MainForm myMainForm; // holds the reference to the current MainForm object
public MyPanel(MainForm myMainForm) {
this.myMainForm = myMainForm; // set the reference
JButton swapPanelBtn = new JButton("Swap Panel");
swapPanelBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
swapPanelBtnActionPerformed();
}
});
}
private void swapPanelBtnActionPerformed() {
myMainForm.swapJPanels(0); // calling a method on the reference to the current MainForm object
}
}