你能把一个动作监听器放在一个动作监听器里面吗?

tcbh2hod  于 2021-07-07  发布在  Java
关注(0)|答案(1)|浏览(372)

当我按下标有“one”的按钮时,我的弹出窗口冻结了,我想这是因为我试图把一个带有动作监听器的按钮放到另一个按钮的动作监听器中。有可能吗?

//code...

    one = new JButton("Customize Race");
    one.setBounds(30,200,200,75);
    one.addActionListener(new ActionListener(){
        @Override
        public void actionPerformed( ActionEvent e ) {
            one.setVisible(false);

            Boolean pic = true;

            String Player1 = "Player1";

            while (pic == true)
            {
                p1 = new JButton(Player1);
                p1.setBounds(50, 50, 200, 100); 
                p1.addActionListener(new ActionListener(){
                    @Override
                    public void actionPerformed( ActionEvent e ) {
                        // code that will pull up menu to 
                           customize string value of Player1 
                    }
                });

                next1 = new JButton("Next =>");
                next1.setBounds(50, 375, 450, 50); 
                next1.addActionListener(new ActionListener(){
                    @Override
                    public void actionPerformed( ActionEvent e ) {
                        Boolean pic = false;
                    }
                });

                panel.add(p1);
                panel.add(next1);

            }              
                p1.setVisible(false);
        }
    });
    panel.add(one);

    frame.setVisible(true);
dpiehjr4

dpiehjr41#

你能把一个动作监听器放在一个动作监听器里面吗?
是的,您可以在actionlistener中创建一个组件,并将actionlistener添加到新组件中。
这不是问题所在。
我的弹出窗口冻结了,

while (pic == true)

问题是您有一个while循环继续执行。
你的actionlistener不断地创建组件并将它们添加到框架中,循环永远不会结束。
摆脱while循环!!!
此外,将组件添加到可见框架时,代码应为:

panel.add(....);
panel.revalidate();
panel.repaint();

revalidate()调用布局管理器,这样就可以正确定位组件,repaint()只需确保所有组件都被重新绘制。

相关问题