Мой вопрос сводится к следующему: является ли это стандартной структурой в программировании на Swing, чтобы дать слушателям контроль над новыми компонентами (например, новым JPanel) для отображения и ввода, и дать слушателям этого нового компонента контроль над новыми компонентами для отображения и ввода и так до бесконечности? Или же Java должна вернуться к какому-то объединяющему классу, который связывает все компоненты Swing вместе в процедурном порядке?
В настоящее время в моем приложении, которое использует только один JFrame, в моих слушателях мой начальный объект JFrame передается в качестве параметра всем моим JPanels, чтобы их слушатели могли вызывать removeall (), чтобы очистить кадр для нового JPanel. Например, короткий код следующим образом
public class MainFrame {
JFrame jfrm;
public MainFrame() {
jfrm = new JFrame("Main Frame");
JPanel mainPanel = new MainPanel(jfrm);
}
}
public class MainPanel extends JPanel {
public MainPanel(final JFrame mainFrame) {
JButton example = new JButton("Example");
example.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent le) {
mainFrame.removeall();
JPanel 2ndPanel = new 2ndPanel(mainFrame);
mainFrame.add(2ndPanel);
mainFrame.validate();
}
});
}
}
Это правильная структура - где слушатели генерируют новые панели, а не какой-то объединяющий класс? Но если это так, как компилятор Java может добраться до mainFrame.validate (), если существует бесконечная каскадность слушателей? Я процедурный программист старой школы, пытающийся программировать Swing-приложение на Java, и я считаю, что, возможно, я не понял основные концепции программирования на Swing. С нетерпением ждем любых полезных ответов, и заранее спасибо!