Swing 点击一个不可见的按钮
在使按钮不可见后,我可以在按钮上调用Swing 点击一个不可见的按钮,swing,jbutton,actionlistener,Swing,Jbutton,Actionlistener,在使按钮不可见后,我可以在按钮上调用doClick。 比如: doClick()还能用吗?我刚刚为您试用过。它仍然有效,这意味着它仍然会触发actionPerformed()方法 但是,如果您禁用它,它将不起作用:按钮。setEnabled(false),这是有意义的。发现这一点的最简单方法当然是测试它(例如,在单元测试中,如果您担心Oracle的人员会改变行为) 否则,您可以查看该方法的源代码 public void doClick(int pressTime) { Dimension
doClick
。比如:
doClick()
还能用吗?我刚刚为您试用过。它仍然有效,这意味着它仍然会触发actionPerformed()
方法
但是,如果您禁用它,它将不起作用:
按钮。setEnabled(false)
,这是有意义的。发现这一点的最简单方法当然是测试它(例如,在单元测试中,如果您担心Oracle的人员会改变行为)
否则,您可以查看该方法的源代码
public void doClick(int pressTime) {
Dimension size = getSize();
model.setArmed(true);
model.setPressed(true);
paintImmediately(new Rectangle(0,0, size.width, size.height));
try {
Thread.currentThread().sleep(pressTime);
} catch(InterruptedException ie) {
}
model.setPressed(false);
model.setArmed(false);
}
在那里,您找不到对可见性的检查。再看远一点(例如,在模型的setPressed
方法中),您会发现对启用状态的检查,但可以清楚地看到,没有对存在的可见性进行检查。您还可以看到触发了ActionEvent
,这将触发按钮的actionPerformed
方法
public void setPressed(boolean b) {
if((isPressed() == b) || !isEnabled()) {
return;
}
if (b) {
stateMask |= PRESSED;
} else {
stateMask &= ~PRESSED;
}
if(!isPressed() && isArmed()) {
int modifiers = 0;
AWTEvent currentEvent = EventQueue.getCurrentEvent();
if (currentEvent instanceof InputEvent) {
modifiers = ((InputEvent)currentEvent).getModifiers();
} else if (currentEvent instanceof ActionEvent) {
modifiers = ((ActionEvent)currentEvent).getModifiers();
}
fireActionPerformed(
new ActionEvent(this, ActionEvent.ACTION_PERFORMED,
getActionCommand(),
EventQueue.getMostRecentEventTime(),
modifiers));
}
fireStateChanged();
}
我认为这是最好自己尝试一下的例子之一,看看会发生什么。谢谢Dan为我尝试。是的,当它被禁用时不做任何事情是有意义的。但如果doClick()仍然可以工作,即使按钮不可见,那就很奇怪了。
public void doClick(int pressTime) {
Dimension size = getSize();
model.setArmed(true);
model.setPressed(true);
paintImmediately(new Rectangle(0,0, size.width, size.height));
try {
Thread.currentThread().sleep(pressTime);
} catch(InterruptedException ie) {
}
model.setPressed(false);
model.setArmed(false);
}
public void setPressed(boolean b) {
if((isPressed() == b) || !isEnabled()) {
return;
}
if (b) {
stateMask |= PRESSED;
} else {
stateMask &= ~PRESSED;
}
if(!isPressed() && isArmed()) {
int modifiers = 0;
AWTEvent currentEvent = EventQueue.getCurrentEvent();
if (currentEvent instanceof InputEvent) {
modifiers = ((InputEvent)currentEvent).getModifiers();
} else if (currentEvent instanceof ActionEvent) {
modifiers = ((ActionEvent)currentEvent).getModifiers();
}
fireActionPerformed(
new ActionEvent(this, ActionEvent.ACTION_PERFORMED,
getActionCommand(),
EventQueue.getMostRecentEventTime(),
modifiers));
}
fireStateChanged();
}