3

doClick非表示にした後、ボタンを呼び出すことはできますか?
お気に入り:

StopBtn.setVisible( false );
StopBtn.doClick();

doClick()まだ仕事をしますか?

4

2 に答える 2

4

これを発見する最も簡単な方法は、もちろんそれをテストすることでした (たとえば、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();
}
于 2012-08-27T21:01:09.040 に答える
3

私はあなたのためにそれを試しました。これは引き続き機能します。つまり、actionPerformed()メソッドは引き続きトリガーされます。

ただし、無効にすると機能しませんbutton.setEnabled(false)。これは理にかなっています。

于 2012-08-27T20:55:36.827 に答える