달력

52025  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

GridBagLayout~ㅎㅎ

HomeWork 2010. 1. 15. 17:34

출력된 스크린에서, 버튼들이 어떻게 여러 개의 열과 행에 걸쳐있는지 주목하자. 스크린을 리사이징 해봄으로써 GridBagLayout의 또 다른 특성에 대해서도 알 수 있다. 어느 열과 어느 행이 스크린이 확대됨에 따라 늘어난 공간을 얻을 것인지를 완전히 제어할 수 있다.

GridBagLayout로 레이아웃된 컨테이너에 추가된 각각의 컴포넌트는 컨스트레인트 오브젝트(constraints object)인 GridBagConstraints 와 반드시 연결되어있어야 한다. 이 오브젝트는 각 컴포넌트의 특정 컨스트레인트들을 레이아웃 매니저에 전달한다.

다양한 타입의 컨스트레인트들이 있는데, 각각은 연결된 컴포넌트의 레이아웃을 제어한다. 각 제약은 클래스의 퍼블릭 필드(public field)이다. 제약들은 컨스트럭터를 통해 한번에 모두 설정할 수도 있고, 또는 그 필드에 직접적인 액세스로 개별적으로 설정할 수도 있다. 이러한 필드들에는 세터(setter) 메소드나 게터(getter) 메소드는 없다.

그렇다면, 이제 각 컨스트레인트들에 대해 알아보자.

anchor

앵커(anchor)는 사용 가능한 공간보다 컴포넌트가 더 작을 경우에 컴포넌트가 드리프트(drift)될 방향을 지정한다. 디폴트 값은 CENTER 이다. .8개의 방위는 또다른 설정을 나타낸다. 각각의 설정은 필드에 지정될 수 있는 상수이다. 가능한 설정들은 다음과 같다.

   CENTER
   EAST
   NORTH
   NORTHEAST
   NORTHWEST
   SOUTH
   SOUTHEAST
   SOUTHWEST
   WEST

추가적인 컨트레인트 사항들은 현재의 ComponentOrientation에 기반을 둔 컴포넌트들의 포지션을 가능하게 하는데, 영어에서 보편적으로 쓰이는 수평이면서 왼쪽에서 오른쪽(left-to-right) 방향 맞춤을 위한 설정들은 다음과 같은 상수들로 정해지게 된다.

   FIRST_LINE_END (NORTHEAST)
   FIRST_LINE_START  (NORTHWEST)
   LAST_LINE_END (SOUTHEAST)
   LAST_LINE_START (SOUTHWEST)
   LINE_END (EAST)
   LINE_START (WEST)
   PAGE_START (NORTH)
   PAGE_END (SOUTH)

fill

fill의 값은 더 많은 공간이 사용 가능한 경우 컴포넌트의 리사이징을 제어한다. 만약 fill이 NONE(디폴트 값)으로 설정되어 있다면, GridBagLayout 매니저는 컴포넌트의 적절한 사이즈를 정해주게 된다. 만약 fill이 VERTICAL로 설정되어 있다면, 레이아웃 매니저는 (물론, 추가적인 공간이 있는 경우에만) 컴포넌트의 높이를 리사이징한다. HORIZONTAL의 경우에는 레이아웃 매니저는 폭을 리사이징할 것이고, BOTH로 설정되어 있다면 폭과 넓이에서 사용 가능한 모든 공간을 이용하게 된다.

좀 전의 예제 프로그램 GridBagSampleBOTH를 fill값으로 가진다. VERTICAL, HORIZONTAL, 또는 NONE과 같은 다른 fill 값을 넣어서 프로그램을 한 번 실행해보자. (원하는 결과를 얻기 위한 적절한 fill 설정 라인에 대해서는 설명하지 않겠다.) 예를 들어, 7개의 버튼의 fill을 모두 NONE으로 설정하면 다음과 같은 결과가 나오게 된다.

gridxgridy

gridx와 gridy는 그리드 상의 컴포넌트의 위치를 지정한다. gridx 변수는 컴포넌트의 가장 왼쪽 위치의 셀을 지정하고, gridy 변수는 컴포넌트의 상단 위치의 셀을 지정한다. Cell (0, 0)은 스크린의 초기점에 있는 셀(왼쪽 위)을 의미한다. 컴포넌트들은 다양한 셀들을 합칠 수 있기 때문에 girdx, girdy 위치는 일반적으로 컴포넌트의 시작 셀이다. 명시적으로 셀에 직접 지정할 수도 있지만, RELATIVE 상수를 사용할 수도 있다. RELATIVE 의 gridx 설정은 이전 컴포넌트의 오른쪽에 새로운 컴포넌트를 만들어낸다. girdy의 경우에는, 이전 컴포넌트 아래쪽에 새로운 컴포넌트가 새로운 열을 시작할 것이다.

gridheightgridwidth

gridheight필드와gridwidth 필드는 수평축(gridwidth)과 수직축(gridheight)에 따라 컴포넌트가 점유해야만 하는 셀들의 수를 지정한다. 행과 열에서 셀의 개수를 지정하는 것과 더불어 RELATIVEREMAINDER 클래스 상수들도 사용할 수 있다. 두 개중 어느 한 필드의 RELATIVE 설정을 지정하는 것은 컴포넌트를 행이나(gridheight) 열(gridwidth) 내에서 마지막에서 두번째(second-to-last)로 만드는 결과를 만든다. REMAINDER 설정은 각각의 행이나 열의 맨 마지막 요소를 지정하기 위해 사용한다.GridBagLayout을 사용하는 데 익숙해질 때까지는 RELATIVEREMAINDER보다는 gridx와 gridy, gridheight, gridwidth 설정들을 직접 지정해주는 편이 훨씬 쉬울 것이다. 심지어 익숙해진 단계를 넘어선 후에도, RELATIVEREMAINDER의 사용을 꺼려 하는 당신을 발견할 지도 모른다.

insets

insets 필드는 컴포넌트 주위에 있는 픽셀 내의 외부 패딩(the external padding)을 지정한다. 패딩이란 빈 공간을 뜻하는데, 컴포넌트 주위의 투명한 경계선이라고 보면 되겠다. insets 필드를 설정할 때는 top, bottom, left, right의 패딩 값을 개별적으로 지정해줘야 한다. GridBagSample 프로그램의 insets 설정이 (0, 0, 0, 0) 이었는데, 이는 일반적인 Insets 오브젝트를 위한 설정임을 주의하자.

ipadxipady

ipadx 필드와 ipady 필드는 컴포넌트의 내부 패딩을 지정해준다. ipdax 필드는 컴포넌트의 폭에 패딩을 추가하고, ipady필드는 컴포넌트의 높이에 패딩을 추가한다. 예를 들어, ipadx 설정은 컴포넌트의 양쪽 주위에 여분의 공간을 지정해준다.

weightxweighty

예를 들어 사용자가 스크린을 리사이징 하는 경우처럼, weightx와 weighty 설정을 통해 컨테이너 안에서 공간을 사용할 수 있을 때 어느 컴포넌트의 크기를 키우거나 줄일지 제어할 수 있다. weight 설정은 double이다. (insets을 제외한 다른 모든 설정들은 int 값이다.)

일반적으로, weightx와 weighty 설정은 0.0에서 1.0의 범위 안에서 정한다. 0.0으로 설정한다는 것은 컴포넌트에 여유 공간이 전혀 없음을 의미한다. 1.0으로 설정하는 것은 컴포넌트가 모든 여유 공간을 가지는 것을 의미한다. (혹은 적어도 1.0으로 설정된 다른 컴포넌트들과 그 여유 공간을 공유한다는 것을 의미한다.) 비록 설정값을 0.0에서 1.0의 범위 안에 한정하기는 하지만, 모든 설정값이 다 허용된다. 시스템은 특정 행이나 열을 위한 설정값들의 합에 비례하여 공간을 할당할 것이다. 예를 들자면, 1.0으로 설정한 4개의 컴포넌트는 여유 공간을 균일하게 공유하게 될 것이다. 0.0으로 설정한 컴포넌트 3개와 1.0으로 설정한 컴포넌트 1개의 경우에는 모든 여유 공간을 하나의 컴포넌트에 몰아주게 된다. 1개의 0.0 컴포넌트와 2개의 0.5 컴포넌트, 1개의 1.0 컴포넌트라면, 여유 공간의 절반은 1.0 컴포넌트에 할당되고, 2개의 0.5 컴포넌트가 나머지 여유 공간을 나눠가질 것이다.

스크린의 사이즈가 리사이징이 가능하다면, 어떤 weight 설정이 필요한지 고려하는 것을 잊지 말자. Anchor와 weightx/weighty를 결합하여 효과적으로 사용한다면, 리사이징 시에 컴포넌트들이 스크린의 가장자리를 "감싸안거나" , 스크린의 균형을 유지하면서 컴포넌트의 크기를 비례하여 늘릴 수가 있다.

Try changing some of the GridBagConstraints settings in the GridBagSample program and see what happens. Here's a table that lists the initial GridBagConstraints settings in the program. GridBagSample 프로그램 안에서 GridBagConstraints 설정들을 바꿔보고 어떠한 변화가 일어나는지를 살펴보자. 아래의 표는 그 프로그램의 GridBagConstraints 초기 설정값 목록이다.

Component gridx gridy gridwidth gridheight
One 0 0 1 1
Two 1 0 1 1
Three 2 0 1 1
Four 0 1 2 1
Five 2 1 1 2
Six 0 2 1 1
Seven 1 2 1 1

GridBagLayoutGridBagConstraints의 사용에 대한 더 자세한 정보는 Java Tutorial의 How to Use GridBagLayout을 참조하기 바란다.

GridBagLayout과 그것과 관련된 GridBagConstraints을 활용하기 전에, 방안지를 준비하는 것도 좋다. 여러 개의 행과 열에 걸쳐야 하는 스크린을 디자인하는 경우, 미리 방안지의 그리드에 컴포넌트들을 그려보면 도움이 될 것이다.

'HomeWork' 카테고리의 다른 글

EL & JSTL #2 (천천히 배워가자!!)  (0) 2010.01.20
초간단 JSTL 집고 넘어가자!!  (0) 2010.01.19
Thread ^^;;  (0) 2009.12.23
JSON#2(JavaScript Object Notation)  (0) 2009.12.22
JSON 데이터  (0) 2009.12.22
Posted by 인천총각
|

실전 Applet 차트 만들기!!!
--------------------------------------------------------------------------------------------------------
Graphics

clearRect(시작점x,시작점y,폭,높이);사각형으로 지운다..

drawArc(시작점x,시작점y,폭,높이,시작각도,끝나는각도);호를 그린다

drawImage(이미지,이미지시작x,이미지시작y,이미지표시되는프레임(현재프레임-this),폭,높이);
                                                                                                   toolkit을 통해서 이미지 얻어올것!!

drawLine(시작점x,시작점y,끝x,끝y);일직선으로 선을 긋는다

drawPolygon(x배열,y축배열,int);다각형

drawPolyline();

drawRect(x,y,폭,높이);사각형

drawRoundRect(x,y,폭,높이,각도);둥근사각형

drawString(문자열,x,y);문자열을 그림으로

fillRect...() 속을 채운다!!(getColor,setColor,getFont)로 지정한다.

setXORMode(Color)겹쳐지는부분 색 지정

--------------------------------------------------------------------------------------------------------

1. 차트에서의 pixel 비율로 변환하는 과정

AAA = 최대값-실제값 /(최대값-최소값)

최대값 : 200
최소값 : 100
실제값 : 150
ex) (200 - 150) / 100 = 0.5 (AAA값)

최대값 : 200
최소값 : 100
실제값 : 180
ex) (200 - 180) / 100 = 0.2

최대값 : 200
최소값 : 100
실제값 : 110
ex) (200 - 110) / 100 = 0.9

2. 차트에 그려질 Y축의 값 구하기


0
│                                                   <- 캔버스 윗단
│-----------------------------
│                                            ∧
│                                            │   <- 캔버스 사용 높이
│                                            │
│     o    o                               │
│   o                                       │
│       o                                   │
└──────────---------
300 (y축 pixel 비율)

Applet 높이 : 480
캔버스 사용 높이 : 320 (Applet 높이의 2/3만 실 차트로 사용)
캔버스 윗단 : 80

BBB(y축값)
BBB = (pixel로 변환된 값(AAA) * 캔버스 사용높이)+캔버스의 윗단(캔버스의 한토막= 캔버스 높이 / 6 )


ex) (0.5 * 320)+80 = 240 pixel(캔버스 표시 y축 좌표) 실제값 (150)
ex) (0.2 * 320)+80 = 144 pixel(캔버스 표시 y축 좌표) 실제값 (180)
ex) (0.9 * 320)+80 = 368 pixel(캔버스 표시 y축 좌표) 실제값 (110)


(for문 사용 i=0 부터...)

3. x,y 축 값을 이용하여 그래프 만들기


# 꺽은선 그래프

fillRect 사용 : g.fillRect(x축,y축,width,height);

ex) fillRect(x축(i x 30 + 20-1), y축(240), 3 ,3 );

1. i 값 증가시 x 30 을 x축 간격 조절
2. 기본 20-1 ((i==0)일때) 즉, 19간격에 위에서 구한 y축 좌표값 으로
3. 19,240 좌표에 높,넓이 3의 타원을 그린다.

----------------------------------------------------------------------------------

각 좌표값 잇기!!! (i>0) 클때

drawLine 사용 : g.drawLine(start x축, start y축, end x축, end y축);

즉, g.drawLine(이전좌표 xy, 현좌표 xy)

ex) g.drawline((i-1) x 30 + 20 , 240, i x 30 +20, 144);
 
1. 이전좌표의 (i-1) x 30 +20 은 현 좌표에서 이전좌표의 x축 값을 구하기위함
2. i x 30 +20 은 현 좌표의 x축 을 구함

 
# 막대 그래프


1. 최소값 비교 후 ex) if (Integer.parseInt((String) applet.vtSent.elementAt(i)) == applet.naxismin)

2. 최소값 일 경우

 G.drawLine(i * 30 + 20 - 10, y축 , i * 30 + 20 - 1, y축); // 선하나만 그린다

3. 최소값이 아닐 경우(g.fillRect 사용)
 
 G.fillRect(i * 30 + 20 - 10, nSent, 9, -(nSent - (int) (getSize().height * 5 / 6)));

------->G.fillRect(x축 , y축 , width, height);

 -(y축 - (int) (getSize().height * 5 / 6)) -> y축 좌표값에서 Applet 높이의 5/6을 뺀다
 
ex)

y축 240

Applet 높이 480

-(240-(480*5/6)) ---> -(240 - 400) => -(-160) => 160

 

 

'Applet' 카테고리의 다른 글

JFreeChart (한글 깨짐 현상 해결)  (0) 2010.01.18
APPLET 이란???  (0) 2009.12.29
Posted by 인천총각
|

Performizer-setting(Sever)

2010. 1. 12. 12:41

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.