FrontGUIと呼ばれるメインフレームにサイドパネルが追加されています。このサイドパネルは、JPanelを拡張するFrontGUILinkerと呼ばれるクラスであり、ボタンがあります。プログラムを実行すると、ボタンは何もしません。ActionListenerが呼び出されていないようです。私は他にも同様の設定のコンポーネントをいくつか持っていますが、ボタンはすべてそれらで機能します-私が見ることができる唯一の違いは、それらがJFrameの拡張であり、FrontGUIの直接フィールドではなく、以下のコードで言及されているmainguiの代わりであるということです。このmainguiには、FrontGUIControllerを含む各フレームのControllerクラスを持つフィールドが含まれていますが、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");
}});
}
}
なぜこれが機能しないのか誰かが知っていますか?