doClick
非表示にした後、ボタンを呼び出すことはできますか?
お気に入り:
StopBtn.setVisible( false );
StopBtn.doClick();
doClick()
まだ仕事をしますか?
doClick
非表示にした後、ボタンを呼び出すことはできますか?
お気に入り:
StopBtn.setVisible( false );
StopBtn.doClick();
doClick()
まだ仕事をしますか?
これを発見する最も簡単な方法は、もちろんそれをテストすることでした (たとえば、Oracle の担当者が動作を変更するのではないかと心配している場合は、単体テストで)
@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
のメソッドをトリガーする が起動されることもわかります。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();
}
私はあなたのためにそれを試しました。これは引き続き機能します。つまり、actionPerformed()
メソッドは引き続きトリガーされます。
ただし、無効にすると機能しませんbutton.setEnabled(false)
。これは理にかなっています。