隱藏後,我可以在按鈕上調用doClick
。
喜歡:doClick點擊隱形按鈕
StopBtn.setVisible(false);
StopBtn.doClick();
會doClick()
還是做的工作?
隱藏後,我可以在按鈕上調用doClick
。
喜歡:doClick點擊隱形按鈕
StopBtn.setVisible(false);
StopBtn.doClick();
會doClick()
還是做的工作?
我剛剛爲你嘗試過。它仍然有效,這意味着它仍然會觸發actionPerformed()
方法。
但是,如果您禁用它,則不起作用:button.setEnabled(false)
這是有道理的。
謝謝Dan爲我嘗試。是的,當它被禁用時它沒有做任何事情是有道理的,但如果即使按鈕不可見,doClick仍然可以工作,這很奇怪。 – SomeDude
發現,這是當然的,只是測試它(例如,在一個單元測試,如果你擔心甲骨文那些傢伙將永遠改變行爲)
@Test
public void clickOnInvisibleButton(){
JButton button = new JButton("test button");
button.setVisible(false);
final boolean[] buttonClicked = new boolean[]{false};
button.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
buttonClicked[0] = true;
}
});
button.doClick();
assertTrue("Button has not been clicked", buttonClicked[0]);
}
否則最簡單的方法,你可以採取一個看看該方法的源代碼
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
方法中),您會發現enabled
狀態的檢查,但清楚地看到沒有檢查存在的可見性。你也看到了ActionEvent
被激發,這將觸發按鈕
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();
}
我覺得這是那些情況下,最好是嘗試一下自己,看看會發生什麼情況之一的
actionPerformed
方法。 – mrranstrom