我的问题归结为:Swing 编程中的标准结构是让听众控制新组件(例如新的 JPanel)以进行显示和输入,并让新组件的听众控制新组件以进行显示和输入,等等到无穷大?或者 Java 是否需要恢复为某种统一类,将所有 Swing 组件按程序顺序联系在一起?
目前,在我的仅使用一个 JFrame 的应用程序中,在我的侦听器中,我的初始 JFrame 对象作为参数传递给我的所有 JPanel,因此他们的侦听器可以调用 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() 呢?我是一名老派程序程序员,试图用 Java 编写 Swing 应用程序,我想我可能没有掌握 Swing 编程的基本概念。期待任何有用的答案,并提前致谢!