如何通过声明的名称引用局部变量

时间:2016-11-28 04:36:25

标签: java swing

如果我有一个按钮点击处理函数,我希望能够通过使用以下方式识别哪个按钮被其引用名称(例如minimize_button或maximize_button)和 NOT 点击:

minimize_button.setName("minimize_button");


class Game extends JFrame
{
    public Game()
    {
        JButton minimize_button = new JButton();

        minimize_button.addMouseListener(new MouseAdapter()
        {
             public void mouseClicked(MouseEvent mouse)
             {
                 setWindowState(mouse); 
             }
        });

        JButton maximize_button = new JButton();

        maximize_button.addMouseListener(new MouseAdapter()
        {
             public void mouseClicked(MouseEvent mouse)
             {
                 setWindowState(mouse); 
             }
        });
    }

    private void setWindowState(MouseEvent mouse)
    {
        int window_state = Game.this.getExtendedState();

        JButton button = (JButton)mouse.getComponent();

        if (button == minimize_button)
        {
            if (window_state == JFrame.NORMAL || window_state == JFrame.MAXIMIZED_BOTH)
                window_state = JFrame.ICONIFIED;
        }
        else if (button == maximize_button)
        {
            if (window_state == JFrame.NORMAL)
                window_state = JFrame.MAXIMIZED_BOTH;
            else if (window_state == JFrame.MAXIMIZED_BOTH)
                window_state = JFrame.NORMAL;
        }

        Game.this.setExtendedState(window_state);
    }
}


注意:我不想将其声明为类变量

编辑:我需要在一个功能中处理按钮点击的原因是因为我不想复制代码(见下文)。我不想要以下内容:

class Game extends JFrame
{
    public Game()
    {
        JButton minimize_button = new JButton();

        minimize_button.addMouseListener(new MouseAdapter()
        {
             public void mouseClicked(MouseEvent mouse)
             {
                 int window_state = Game.this.getExtendedState();

                 if (window_state == JFrame.NORMAL || window_state == JFrame.MAXIMIZED_BOTH)
                    Game.this.setExtendedState(JFrame.ICONIFIED);
             }
        });

        JButton maximize_button = new JButton();

        maximize_button.addMouseListener(new MouseAdapter()
        {
             public void mouseClicked(MouseEvent mouse)
             {
                 int window_state = Game.this.getExtendedState();

                 if (window_state == JFrame.NORMAL)
                     window_state = JFrame.MAXIMIZED_BOTH;
                 else if (window_state == JFrame.MAXIMIZED_BOTH)
                     window_state = JFrame.NORMAL;

                 Game.this.setExtendedState(window_state);
             }
        });
    }
}



注意:请不要评论"哦,你应该这样做"。我想知道的是,我可以通过其引用名称引用变量。如果是这样,怎么样?上面例子中的反映不起作用,正如我所说,我不想将它们声明为类变量。

1 个答案:

答案 0 :(得分:0)

在您的示例中,您尝试访问其范围之外的minimize_button和maximize_button。他们不再存在"存在"在Game()构造函数之外,你已经声明了它们。没有什么可以改变它。

另一种方法是将它们声明为类变量,即属性。你说你不想要这个。

我可以建议最简单的改变来编译如下。我不推荐这个,但它会在你已经确定的限制范围内回答你的问题。在这里,我已经通过最小化和最大化按钮引用到您的共享"方法setWindowState()。

class Shapes
{
    virtual void draw(char letter);
    virtual ~Shapes() {}
};