기존의 타입 안전 열거형 클래스는 각 심볼의 타입을 나타내기 위해서 만들었습니다.
각 심볼의 순서가 필요하지 않기 때문에 클래스에 타입정보만 들어 있었습니다.

이번에 만든 타입 안전 열거형 클래스는 
심볼을 클릭하면 리사이즈 박스가 나오는데, 이때 8개의 리사이즈 박스를 나타내야 합니다.
(LEFT, RIGHT, UP, DOWN, LEFTUP, LEFTDOWN, RIGHTUP, RIGHTDOWN)
8개의 리사이즈 박스 자체만으로는 순서가 필요없지만, 마우스가 어떤 리사이즈 박스를 클릭했는지 알려면 
루프를 돌면서 확인을 해야 하고 그때의 딱 걸릴때의 루프 변수번째가 해당 박스라고 구현 되어 있으므로 
순서를 정해 주어야 했습니다.

다음은 기존의 리사이즈 박스에 대한 Named constant을 쓰고 있는 코드 입니다.

/**
     * 현재 클릭 된 곳이 리사이즈 박스안에 있는 것인가를 알아보는 함수
     * @param mousePoint
     * @return
     */
    public int isReSizeArea( Point mousePoint )

    {

        this.clickedResizeBox = -1;

        for( int i = 0; i < this.numResizeBox; i++)

        {

            if( (this.resizeBoxStartPoints[i].x <= mousePoint.x)

            && (this.resizeBoxStartPoints[i].x + this.resizeBoxWidth >= mousePoint.x)

            && (this.resizeBoxStartPoints[i].y <= mousePoint.y)

            && (this.resizeBoxStartPoints[i].y + this.resizeBoxWidth >= mousePoint.y))

            {

                this.clickedResizeBox = i;

            }

        }

        return this.clickedResizeBox;

    }


심볼에 대한 타입 안전 열거형 클래스에는 순서를 적용 할 수 없었지만,
방법이 없는건 아닙니다.
그래서 새로 만든 순서 기반의 타입 안전 열거 클래스입니다.


public class DResizeBox {
    private final String box;
    private DResizeBox(String box){
        this.box = box;
    }
    @Override
    public String toString(){
        return box;
    }

    public static final DResizeBox LeftUp = new DResizeBox("LeftUp");
    public static final DResizeBox RightUp = new DResizeBox("RightUp");
    public static final DResizeBox LeftDown = new DResizeBox("LeftDown");
    public static final DResizeBox RightDown = new DResizeBox("RightDown");
    public static final DResizeBox Up = new DResizeBox("Up");
    public static final DResizeBox Down = new DResizeBox("Down");
    public static final DResizeBox Right = new DResizeBox("Right");
    public static final DResizeBox Left = new DResizeBox("Left");
    public static final DResizeBox ArrowStart = new DResizeBox("ArrowStart");
    public static final DResizeBox ArrowTarget = new DResizeBox("ArrowTarget");
    public static final DResizeBox ArrowZigzag = new DResizeBox("ArrowZigzag");
    public static final DResizeBox None = new DResizeBox("None");
    private static final DResizeBox PRIVATE_ORDERED_BOX[] = {
        LeftUp, RightUp, RightDown, LeftDown, Up, Right, Down, Left    // None은 넣지 않았음.
    };
    public static final List orderedBox =
            Collections.unmodifiableList(Arrays.asList(PRIVATE_ORDERED_BOX));
}

타입 안전 열거로 정의한 상수는 객체이므로 컬렉션에 넣을 수 있습니다.. 이런식으로 하여 아까전의 코드를 거의 바꾸지 않고 구현 할 수 있었습니다..

매우 좋은것 같다.ㅋㅋ


신고
by danguria 2009.10.23 22:44

티스토리 툴바