기타2006. 4. 18. 00:48

지난 일요일에 벚꽃 나들이 다녀왔습니다.
바람이 조금 불긴 했지만, 날씨가 꽤나 화창하더군요.

동네 근처에 있는 워커힐로 다녀왔는데,
총 경비는 출발하면서 사먹은 김밥 2000원이 전부입니다. ^^

먼저 집에서 워커힐로 가는 길에 아차산 공원이 있어 사알짝 들렀습니다.

사용자 삽입 이미지

아차산공원 1

사용자 삽입 이미지

아차산공원 2

집 근처인데도 처음 가보는 곳이라 이런 공원이 있는줄도 몰랐죠.
조그만 호수에서 인어아가씨가 반겨주더랍니다.

사용자 삽입 이미지

아차산공원 인어아가씨

자생 식물도 구경할 수 있게 해두었는데, 목적이 이게 아니다 싶어 문앞까지만 가봤습니다.

사용자 삽입 이미지

아차산공원 자생식물관찰로

공원을 뒤로 하고 다시 워커힐로 발길을 돌렸습니다.
'워커힐길'이라고 하면 벚꽃이 흐드러지게 피어있는 모습을 상상했었는데,
꼭 그렇지만은 않더군요.
간간이 나타나는 벚꽃들이 감질맛나게...

사용자 삽입 이미지

워커힐길

그렇게 인파에 휩쓸려 걸어가다보니 어느새 워커힐에 도착했습니다.
여기도 이쁜이 아가씨가 반겨주더군요. ^^;

사용자 삽입 이미지

워커힐 아가씨 동상

어디부터 봐야되나... 잠깐 고민했는데 조금 둘러보니 '무슨무슨힐'이 여러개 있더군요.
그중에 눈에 띄는게 있어 따라가봤습니다.

사용자 삽입 이미지

피자힐 표지판

피자힐? 이게 뭘까... 피자처럼 생긴 언덕인가...?
길을 따라 올라가봤습니다.

사용자 삽입 이미지

피자힐 올라가는길

아뿔싸... 이곳은...

사용자 삽입 이미지

피자힐

그냥 피자랑 몇몇 간식거리를 파는 곳인 것 같습니다. -_-
날씨가 좋아서 다들 야외에서 즐기고 있더군요.

사용자 삽입 이미지

피자힐 야외

피자힐 옆으로 조금 돌아가니 저 멀리 'W' 6성호텔이 보입니다.

사용자 삽입 이미지

피자힐에서 본 W호텔

개인적으로는 외관이 좀... 촌스러워 보입니다.

피자힐에서 잠시 휴식을 취하고, '워커힐 벚꽃축제 (봄의 왈츠)' 장소로 가보았습니다.

사용자 삽입 이미지

워커힐 벚꽃축제 입구

엄청난 인파가 몰렸더군요...

사용자 삽입 이미지

워커힐 벚꽃축제 1

사용자 삽입 이미지

워커힐 벚꽃축제 2

여기서도 음식을 야외에서 즐길 수 있도록 해뒀습니다.

사용자 삽입 이미지

워커힐 벚꽃축제 3

캐리커쳐나 풍선을 파는 곳도 있었습니다.

사용자 삽입 이미지

워커힐 벚꽃축제 4

Infinity에서 자동차 홍보도 하고 있던데... 이런 건 왜... -_-

사용자 삽입 이미지

워커힐 벚꽃축제 5

사용자 삽입 이미지

워커힐 벚꽃축제 6

벚꽃축제 거리를 벗어나 조금 더 깊숙히 가보니,
드디어 발견!
벚꽃이 지대루 blooming했더군요.

사용자 삽입 이미지

벚꽃 1

다들 기분이 좋은 것... 같지는 않습니다. ㅎㅎ
저는 열심히 여기저기 찍어댔죠.
여기 몇 장 올려봅니다.

사용자 삽입 이미지

벚꽃 2

사용자 삽입 이미지

벚꽃 3

사용자 삽입 이미지

벚꽃 4

사용자 삽입 이미지

벚꽃 5

개인적으로 아래 사진이 젤 맘에 듭니다.

사용자 삽입 이미지

벚꽃 6

하...
날씨가 좋으니 맘이 설레더군요.
오랜만에 살아숨쉬는 세상을 다녀온 기분입니다.
그날 하루만큼은 전자파를 쏘지 않는 날로 하고 싶었습니다.
(결국 집에 돌아와서 실패하고 말았지만요...)

돌아오는 길에 어린이 대공원도 들렸는데,
입장료(1500원)때문에 입구에서 발길을 돌렸습니다.;;
다음에 가봐야지요~

나름대로 즐거운 나들이였습니다.
이번주 비내리고 나면 벚꽃 다 떨어질 것 같던데,
때맞춰 잘 다녀왔네요.

봄입니다.
즐거운 일들이 많이 생겼으면 좋겠습니다. :)

Posted by roguebean
자바2006. 3. 30. 12:10

1. javax.swing.ToolTipManager
ToolTipManager는 tooltip과 관련된 동작을 총괄하는 class로서 shared instance가 사용된다. 다음은 ToolTipManager에 대한 javadoc description이다.

Manages all the ToolTips in the system. ToolTipManager contains numerous properties for configuring how long it will take for the tooltips to become visible, and how long till they hide. Consider a component that has a different tooltip based on where the mouse is, such as JTree. When the mouse moves into the JTree and over a region that has a valid tooltip, the tooltip will become visibile after initialDelay milliseconds. After dismissDelay milliseconds the tooltip will be hidden. If the mouse is over a region that has a valid tooltip, and the tooltip is currently visible, when the mouse moves to a region that doesn't have a valid tooltip the tooltip will be hidden. If the mouse then moves back into a region that has a valid tooltip within reshowDelay milliseconds, the tooltip will immediately be shown, otherwise the tooltip will be shown again after initialDelay milliseconds.

2. ToolTip Registration
JComponent의 tooltip은 JComponent.setToolTipText(String) 메서드로 등록할 수 있다. JComponent.setToolTipText(String) 메서드는 clientProperties라는 ArrayTable에 tooltip에 해당하는 key, value를 세팅한 뒤, ToolTipManager.registerComponent(JComponent) 메서드를 호출하는데, 이 메서드는 ToolTipManager 자신을 해당 JComponent에 MouseListener, MouseMotionListener로 등록한다.

3. ToolTip Component Structure
child window 형태인 듯 하나 아직 제대로 안 봤음. 나중에 기회가 생기면 update하자~

4. ToolTip Display Process
ToolTipManager가 tooltip을 띄우고, 감추는 과정은 다음과 같다.

  • mouse enter 시점에 enterTimer.start()를 호출한다.
  • enterTimer는 750 ms 이후 insideTimerAction.actionPerformed()를 호출한다.
  • insideTimerAction은 showTipWindow()를 호출하여 tooltip을 띄운 뒤 insideTimer.start()를 호출한다.
  • insideTimer는 4000 ms 후에 stillInsideTimerAction.actionPerformed()를 호출한다.
  • stillInsideTimerAction은 hideTipWindow()를 호출하여 tooltip을 감춘다.

기본적으로는 위와 같이 동작하고, 조금 더 자세히 살펴보면 다음과 같다.

  • tooltip이 뜨기 전에 해당 component내에서 mouse move가 발생하면 enterTimer.restart()가 호출되므로, 엄밀히 따지면 mouse cursor가 해당 component내에서 정지된 뒤 750 ms가 흘러야 tooltip이 뜬다.
  • tooltip이 뜬 상태에서 해당 component내에서 mouse move가 발생하면 insideTimer.restart()가 호출되므로, 엄밀히 따지면 mouse cursor가 해당 component내에서 정지된 뒤 4000 ms가 흘러야 tooltip이 사라진다.
  • mouse exit 시점에 exitTimer.restart()가 호출되고, 이 Timer는 500 ms 이후 showImmediately(delay 없이 tooltip을 즉시 띄우는 flag)를 false로 세팅한다. 즉, mouse exit 이후 500 ms 이전에 (tooltip을 가진) 다른 component 영역에 mouse enter가 발생하면 해당 component의 tooltip이 delay 없이 즉시 뜨게 된다.

위에서 언급된 각 시간들에 대한 명칭과 내부적인 reference는 다음과 같다.

Time Name Reference
750 ms initialDelay enterTimer.initialDelay
4000 ms dismissDelay insideTimer.initialDelay
500 ms reshowDelay exitTimer.initialDelay

이 시간들은 ToolTipManager의 getter/setter 메서드로 참조 및 설정이 가능하다. (ex. ToolTipManager.setDismissDelay(int))

5. Issues about ToolTip
a. JTable, JTree, JTabbedPane의 multi-tooltip
부위별로 다른 tooltip이 떠야 하는 component들이다. 자세한 내용은 필요한 경우에 조사할거다. 하하...
b. tooltip by window focusing
JRE 1.5에서 ToolTipManager.showTipWindow() 메서드의 초반부에 다음 코드가 추가되었다.

for (Container p = insideComponent.getParent(); p != null; p = p.getParent()) {
if (p instanceof JPopupMenu) break;
if (p instanceof Window) {
if (!((Window)p).isFocused()) {
return;
}
break;
}
}

이 코드는 deactivated(defocused) Window의 component가 tooltip을 띄우던 버그때문에 추가되었다. (일반적인 windowing system에서는 focused window만 tooltip을 띄울 수 있도록 하는 듯... 그럼 rollover도 마찬가지 아닌가?)
그럼 예를 들어 Window(A)를 owner로 하는 Window(B)가 있다고 하자. JRE 1.4 이하에서는 어떤 Window가 focus를 가지든 항상 tooltip이 뜬다. 심지어 두 Window 모두 focus를 잃는다 해도 tooltip은 꿋꿋이 뜬다.
하지만 JRE 1.5에서는 상황이 다르다. 오로지 focus를 가진 Window만 tooltip을 띄울 수 있다. Window(A)가 focus를 가진 경우, Window(B)는 tooltip이 뜨지 않으며, Window(B)가 focus를 가진 경우는 Window(A)의 tooltip이 뜨지 않게 된다.
따라서 이와 같은 구성의 UI를 작성시, 두 Window 중 하나만 focus를 가지더라도 두 Window 모두 tooltip을 띄울 수 있도록 하려면...
1. Window(B)를 Window가 아닌 다른 component로 구성하든지... (Window가 아니면 안되는 경우가 있겠다)
2. ToolTipManager를 override하든지... (위험하다)
3. 강제로 tooltip을 띄우든지... (귀찮고 위험하다)

흠... 별로다. 좀 더 좋은 방법 없을까?

6. References
- [J2SE 1.4.2 API document] ToolTipManager (http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/ToolTipManager.html)
- [J2SE 1.4.2 API document] JToolTip (http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/JToolTip.html)
- [J2SE 1.4.2 API document] JComponent (http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/JComponent.html)
- [Java Tutorial] How to Use Tool Tips (http://java.sun.com/docs/books/tutorial/uiswing/components/tooltip.html)
- [SDN Java Bug Database] Bug ID: 4148057 Using ToolTips... (http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4148057)

Posted by roguebean
잡념2006. 3. 16. 12:02

구독중인 잡지에 인터넷 검색창에 내 이름을 써보자...라는 주제의 글이 있었다.
그 글을 기고한 사람은 검색결과로 나타난 동명이인들을 보면서 새로운 자신을 발견한 느낌이라 했다.
과거의 자신과 만나는 영화 속 주인공처럼 또다른 나를 만난 것 같다고 했다.

나도 사실 예전에 몇 번 검색해본 적이 있다.
특별한 느낌은 없었고 그냥 나와 같은 이름을 사용하는 사람들이 있구나~ 정도의 생각만 했다.

그리고 오늘 그 글이 생각나서 또 검색을 해봤다.
예전에 비해 결과가 많아졌다.
사람은 늘지 않았을텐데... 링크만 늘어나는군...

개인 블로그에서 인물 소개까지, 다양한 페이지와 다양한 직업이 있다.
변호사, 목사, 산업과학기술연구소 소장, 충북대학교 본부직속 전기·전자·컴퓨터 공학부 교수, 대치4동 집배원, 독립의사...

다들 나름대로의 목적이 있어 웹페이지를 만들었겠지만,
개인적으로 내 이름은 (적어도 웹상에서는) 나 혼자만 썼으면 좋겠다.
이렇게 동명이인이 많으니 db table의 primary key를 name으로 사용못하지...-_-;

잠온다...
어쨌든, 나이가 들어가면서 내 이름 석자, 검색 결과에서 상위랭크되게 해봐야 되지 않겠소! :)

Posted by roguebean