如果我有按钮单击处理函数,我希望能够通过使用以下参数识别哪个按钮被其引用名称(例如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);
}
});
}
}
注:好心从评论:“哦,你应该这样做这样”不要。我想知道的是,我可以通过它的参考名称引用一个变量。如果是这样,怎么样?在上面的例子中反射将不起作用,正如我所说的,我不想将它们声明为类变量。
你看过https://docs.oracle.com/javase/tutorial/uiswing/events/actionlistener.html吗? – randominstanceOfLivingThing
(1-)重复的代码是什么?我看到的唯一重复代码是获取/设置扩展状态。没有理由去做你正在做的事情。你真的使整个过程变得复杂。最小化和最大化侦听器都包含不同的功能,不应该被组合成一个单一的侦听器。你甚至不应该在JButton上使用MouseListener。你应该使用'ActionListener'。 – camickr
@camickr,你是正确的,只有一个设置被修改。然而,正如我已经指出的那样,以上只是一个例子。每当窗口状态发生变化时,都会进行一些更改。关于“您应该使用....”,请阅读底部注意。 – johnny