자바 SWT: Mouse Event, KeyEvent 에서 stateMask 필드 의 용법

9755 단어 자바
SWT 에는 키보드 마우스 등 입력 장치 와 관련 된 이벤트 (Mouse Event, KeyEvent, Selection Event GestureEvent TouchEvent) 에 stateMask 필드 가 있 습 니 다.이 필드 의 역할 은 현재 키보드 의 수정자 키 (modifier keys) 와 마우스 단추 (button) 의 누 른 상 태 를 바 이 너 리 마스크 (mask) 로 표시 합 니 다.
여기 modifier keys 는 alt, ctrl, shift, command 키 마우스 버튼 을 말 합 니 다. 마우스 유형 에 따라 왼쪽 키, 가운데 키, 오른쪽 키, BUTTON 4, BUTTON 5 는 org. eclipse. swt. SWT 의 상수 정 의 를 참조 할 수 있 습 니 다.
stateMask 필드 를 통 해 현재 보조 키 의 상 태 를 판단 할 수 있 습 니 다. 예 를 들 어 다음 과 같 습 니 다.
e.stateMask == SWT.SHIFT // 判断只有shift键按下
(e.stateMask & SWT.MODIFIER_MASK)==SWT.SHIFT // 判断modifier keys中只有shift键按下,忽略mouse button状态
(e.stateMask & SWT.BUTTON_MASK)==SWT.BUTTON1// 判断只有鼠标左键按下,忽略modifier keys状态
e.stateMask ==(SWT.CTRL|SWT.BUTTON1) // 判断只有ctrl和鼠标左键同时按下
(e.stateMask | (SWT.CTRL|SWT.BUTTON1))==(SWT.SHIFT|SWT.BUTTON1) // 判断只有ctrl和鼠标左键同时按下,忽略其他键

위 코드 중 SWT. MODIFIERMASK 는 모든 modifier keys 의 조합 마스크 입 니 다.MASK 는 모든 마우스 단추 의 조합 마스크 입 니 다. 이 두 상수 가 org. eclipse. swt. SWT 류 의 정적 초기 화 코드 에 할당 되 어 있 습 니 다 BUTTONMASK = BUTTON1 | BUTTON2 | BUTTON3 | BUTTON4 | BUTTON5; MODIFIER_MASK = ALT | SHIFT | CTRL | COMMAND;
주의해 야 할 것 은 특정한 이벤트 에서 statMask 가 대응 하 는 상 태 는 감지 되 지 않 습 니 다. 예 를 들 어 shift + 마우스 왼쪽 건 을 누 르 면 org. eclipse. swt. events. Mouse Adapter 의 mouse Down 방법 에서 e.stateMask==(SWT.BUTTON1|SWT.SHIFT) 되 돌아 오 는 것 은 false e.button==1&&e.stateMask==SWT.SHIFT 되 돌아 오 는 것 이 true 입 니 다. mouse Down 사건 이 발생 했 기 때문에그래서 stateMask 에서 SWT. BUTON 1 에 대응 하 는 상태 가 1 로 설정 되 지 않 았 습 니 다.
그러나 shift + 마 우 스 를 누 르 고 왼쪽 으로 마 우 스 를 움 직 일 때 org. eclipse. swt. events. Mouse MoveListener e.stateMask==(SWT.BUTTON1|SWT.SHIFT) 에서 true 로 정확하게 판단 할 수 있 습 니 다. mouse Down 이 발생 했 고 e.button==1&&e.stateMask==SWT.SHIFT 으로 판단 할 수 없습니다. e. button 은 현재 이벤트 에서 누 른 마우스 키 일 뿐 이기 때 문 입 니 다.
같은 이유 로 shift + 마우스 왼쪽 을 건 드 린 후 마우스 왼쪽 단 추 를 누 르 면 org. eclipse. swt. events. Mouse Adapter 의 mouseUp 방법 에서 e. stateMask 와 e. button 의 상 태 는 e.button==1&&e.stateMask==(SWT.BUTTON1|SWT.SHIFT) 입 니 다.
이렇게 이해 할 수 있 습 니 다. stateMask 는 이미 발생 한 상태 입 니 다. button 의 숫자 는 현재 이벤트 가 발생 한 마우스 버튼 을 대표 합 니 다.
코드 를 간소화 하기 위해 자주 사용 하 는 판단 을 정적 방법 으로 다음 과 같이 썼 습 니 다. StateMaskUtilits. java
package net.gdface.ui;

import org.eclipse.swt.SWT;

/** * @author guyadong * @see {@link org.eclipse.swt.events.MouseEvent#stateMask} * @see {@link org.eclipse.swt.events.KeyEvent#stateMask} * @see {@link org.eclipse.swt.events.SelectionEvent#stateMask} * @see {@link org.eclipse.swt.events.GestureEvent#stateMask} * @see {@link org.eclipse.swt.events.TouchEvent#stateMask} * @see {@link org.eclipse.swt.SWT#BUTTON_MASK} * @see {@link org.eclipse.swt.SWT#MODIFIER_MASK} */
public class StateMaskUtilits {

    /** * * @param stateMask * @return modifier keys中有且只有shift键按下则返回true,忽略mouse button状态 */
    public static final boolean onShift(int stateMask){
        return (stateMask & SWT.MODIFIER_MASK)==SWT.SHIFT;
    }
    /** * @param stateMask * @return modifier keys中有且只有ctrl键按下则返回true,忽略mouse button状态 */
    public static final boolean onCtrl(int stateMask){
        return (stateMask & SWT.MODIFIER_MASK)==SWT.CTRL;
    }
    /** * @param stateMask * @return modifier keys中有且只有alt键按下则返回true,忽略mouse button状态 */
    public static final boolean onAlt(int stateMask){
        return (stateMask & SWT.MODIFIER_MASK)==SWT.ALT;
    }
    /** * @param stateMask * @return modifier keys中有且只有command键按下则返回true,忽略mouse button状态 */
    public static final boolean onCommand(int stateMask){
        return (stateMask & SWT.MODIFIER_MASK)==SWT.COMMAND;
    }
    /** * @param stateMask * @return 所有modifier keys都没有按下返回true */
    public static final boolean zeroModifier(int stateMask){
        return (stateMask & SWT.MODIFIER_MASK) == 0;
    }
    /** * @param stateMask * @return 所有鼠标按钮都没有按下返回true */
    public static final boolean zeroButton(int stateMask){
        return (stateMask & SWT.BUTTON_MASK) == 0;
    }
    /** * @param stateMask * @return 所有鼠标按钮只有左键按下时返回true */
    public static final boolean onButtonLeft(int stateMask){
        return (stateMask & SWT.BUTTON_MASK) == SWT.BUTTON1;
    }
    /** * @param stateMask * @return 所有鼠标按钮只有中键按下时返回true */
    public static final boolean onButtonMiddle(int stateMask){
        return (stateMask & SWT.BUTTON_MASK) == SWT.BUTTON2;
    }
    /** * @param stateMask * @return 所有鼠标按钮只有右键按下时返回true */
    public static final boolean onButtonRight(int stateMask){
        return (stateMask & SWT.BUTTON_MASK) == SWT.BUTTON3;
    }
    /** * @param stateMask * @param mask * @return 指定的组合键(mask)被按下时返回true,忽略其他键 */
    public static final boolean onMask(int stateMask,int mask){
        return (stateMask & mask) == mask;
    }
    /** * @param stateMask * @param mask * @return 指定的组合键(mask)都没有按下时返回true,忽略其他键 */
    public static final boolean zeroMask(int stateMask,int mask){
        return (stateMask & mask) == 0;
    }
}

'SWT 상용 구성 요소' 참조

좋은 웹페이지 즐겨찾기