我有一个JMenuItem
带有一个的ActionListener
,在这个ActionListener
我想添加一个GridBagLayout
到我的frame
(可能有也可能没有一个内容窗格尚未添加 - 出于测试目的它没有),然后添加components
到那个frame
。on it 的设计是frame works
自己的,但我想trigger
从ActionListener
on aJMenuItem
开始,这就是我遇到问题的地方。它不会从ActionListener
. 我已经尝试从 AL 类中的不同方法运行相同的代码,但这也不起作用。
ActionListener
当我完全注释掉时,JLabel
我想测试的将添加到GBL
正确的位置,以及系统prints
我的debug
行here和here2。没有语法错误被compiler
. 这会产生所需的结果,并打印标签。(请参阅下面的图片,了解当我完全注释掉 AL 时会发生什么。)有问题的代码片段(在哪个框架中是 my JFrame
)如下:
// (frame created, menus added, etc.) ...
JMenuItem vPoke1Item = new JMenuItem("Pokemon 1");
vPoke1Item.setActionCommand("poke1");
viewMenu.add(vPoke1Item);
//Setup GBL to view stats for Pokemon 1
vPoke1Item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
// debug output
System.out.println("here");
// Set up the content pane
frame.getContentPane().removeAll();
GridBagLayout gbl = new GridBagLayout();
GridBagConstraints gbc = new GridBagConstraints();
Container pane = frame.getContentPane();
pane.setLayout(gbl);
// Make a StatCalcObject (all my labels/fields are already initialized)
StatCalc1 sc1 = new StatCalc1();
// Add it to pane
gbc.gridx = 0;gbc.gridy = 0;gbl.setConstraints(sc1.speciesL, gbc);
pane.add(sc1.speciesL);
frame.revalidate();
frame.repaint();
// debug output
System.out.println("here2");
}
});
// (etc.)
现在,当我运行此代码时,我仍然可以打印“here”和“here2”的调试行,因此它告诉我 ActionListener 运行良好。但是标签没有出现。编译器仍然没有发现语法错误。所以我在这里挠头。我究竟做错了什么?我希望这段代码片段足以理解问题,但如果你想要完整的代码,我可以提供。