我有一个带有ActionListener的JMenuItem,在这个ActionListener中,我想添加一个GridBagLayout到我的框架(可能还可能没有添加一个内容窗格 – 为了测试的目的,它不会),然后添加组件到该框架.框架的设计是自己的,但是我想从JMenuItem上的ActionListener触发它,这里是我遇到的问题.它不会从ActionListener内部显示.我尝试从类中的不同方法运行与AL相同的代码,也不工作.
当我完全注释出ActionListener时,我想测试的JLabel在正确的位置增加了GBL,系统在这里和这里打印了我的调试行.编译器没有收到语法错误.这产生了期望的结果,并且打印标签. (当我完全注释掉AL时,请看下面的图像.)有关代码的代码片段(在哪个框架是我的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运行正常.但标签不显示.仍然没有由编译器拾取的语法错误.所以我在这边抓我的头我究竟做错了什么?我希望这段代码片段足以理解这个问题,但是如果你想要完整的代码,我可以提供它.