2012-08-27 4 views
3

버튼에 보이지 않게 한 후 doClick으로 전화를 걸 수 있습니까?
좋아 : do 보이지 않는 버튼을 클릭하십시오

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

것이다 doClick()

는 여전히 일을?

+5

actionPerformed 방법을 트리거하는 ActionEvent 해고되는 것을 알 수있다. – mrranstrom

답변

3

방금 ​​해 보았습니다. 여전히 작동하므로 여전히 actionPerformed() 메소드를 트리거합니다.

그러나 비활성화하면 작동하지 않습니다. button.setEnabled(false) 이는 의미가 있습니다.

+0

나를 위해 그것을 시도해 줘서 고마워요 댄. 그렇습니다. disabled 일 때 아무것도하지 않을 때 의미가 있습니다. 그러나 버튼이 보이지 않아도 doClick()이 여전히 작동하면 이상합니다. – SomeDude

3

이 (당신이 오라클에서 그 사람들이 이제까지 동작을 변경하는 것이 두려워하면 단위 테스트에서 예) 단지

@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 상태에 대한 확인을 볼 수 있지만 가시성에 대한 점검이 없다는 것을 분명히 알 수 있습니다. 또한 버튼을 나는이가 자신을 위해 그것을 밖으로 시도하고 무슨 일이 일어 나는지하는 것이 가장 좋습니다 그 인스턴스 중 하나라고 생각

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(); 
} 
관련 문제