我有一个名为 FrontGUI 的主框架,其中添加了一个侧面板。这个侧面板是一个名为 FrontGUILinker 的类,它扩展了 JPanel,并且上面有一个按钮。当我运行该程序时,该按钮不执行任何操作 - ActionListener 似乎从未被调用过。我还有其他几个具有类似设置的组件,并且按钮都可以在它们上工作 - 我能看到的唯一区别是它们是 JFrame 的扩展,它们不是 FrontGUI 的直接字段,而是下面代码中提到的 maingui . 这个 maingui 包含每个帧的 Controller 类的字段,包括 FrontGUIController,但 FrontGUILinkerController 是 FrontGUIController 中的一个字段。以下是我的课程大纲,希望只省略不相关的内容。主要的 JFrame 类:
public class FrontGUI extends JFrame {
public FrontGUILinker linkerPanel;
public JButton btnShowhideLinker;
public FrontGUI() {
linkerPanel = new FrontGUILinker();
contentPane.add(linkerPanel, BorderLayout.EAST);
btnShowhideLinker = new JButton("Show/Hide Linker");
contentPane.add(btnShowhideLinker);
}
}
这是它的“控制器”类。侧面板可以显示或不显示,这是这个动作监听器所做的,这似乎工作得很好。
public class FrontGUIController {
public MAINGUI maingui;
private FrontGUI frame;
public FrontGUILinkerController linkerController;
public FrontGUIController(MAINGUI parent) {
maingui = parent;
frame = new FrontGUI();
linkerController = new FrontGUILinkerController(maingui);
//Button: Show/Hide linkerPanel
frame.btnShowhideLinker.addActionListener( new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
frame.linkerPanel.setVisible(!frame.linkerPanel.isVisible());
}});
}
}
这是 FrontGUILinker 类:
public class FrontGUILinker extends JPanel {
public btnCreateLink;
public FrontGUILinker() {
btnCreateLink = new JButton("Create Link");
add(btnCreateLink);
}
}
这是该类的控制器:
public class FrontGUILinkerController {
public MAINGUI maingui;
private FrontGUILinker frame;
public FrontGUILinkerController(MAINGUI parent) {
maingui = parent;
frame = new FrontGUILinker();
// Add listener to Create Link button
frame.btnCreateLink.addActionListener( new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
System.out.println("Create Link button has been clicked");
}});
}
}
有人知道为什么这不起作用吗?