본문 바로가기
java-programming

Java 사용자 정의 Component 만들기

by hongiiv 2008. 2. 16.
반응형
이전 포스팅에서 총 3개의 Java Panel 만들고 Panel 자체를 이미지로 출력해서 Google Maps API에서 사용할 Custom Map Tile에 사용하기로 했다.

문제는 Sense Panel과 AntiSense Panel에 Genome 정보(SNP, CNV, Exon, Intron 등등등등)를 어떻게 표시할것인가?에 대한 것이다. 그전에 그러면 Bioinformatics에서 위의 정보들을 보여주기 위해서 사용하는 그래픽은 어떠한 것들이 있는지 간단히 살펴보자.

glyph_showcase
BioRuby의 다양한 생물 정보 표시 그래프??

위의 그림들은 흔히 우리가 Genome Browser에서 보는 표시형식들이다. box, line, line with handles, directed, directed box, triangle, spliced, direct spliced, composite features, transcripts들을 통해서 생물학 정보를 보여주고 있다. (출처 : Bio-Ruby의 Bio::Graphics http://bio-graphics.rubyforge.org/)

이러한 여러 모양의 그래프는 첫째 이뻐야 한다. 그래야 나중에 논문에 삽입하거나 할때 좀 뽀다구가 나게 된다. 둘째는 만들기 쉬워야 한다. 이 두가지를 만족하도록 위의 그래프??들을 Java를 통해서 만들어 보도록 하자.

우선, 둘째 부분을 만족하기 위해서는 각 모양을 컴포넌트로 만들어서 두고 두고 사용하면 된다. Java의 Component 객체를 상속받아서 자신만의 custom component를 만들어 두면 된다. 이때 각 컴포넌트는 서로 컴포넌트들이 겹치더라도 컴포넌트가 반투명화 되어 있어 서로 겹쳐도 상관없도록 만들었다.

그럼 차근차근 이쁘고 반투명한 나만의 Bioinformatics 정보를 표현하기 위한 컴포넌트를 만들어보자. ^^;;  결과부터 보면 다음과 같다. 이 컴포넌트는 상단에 텍스트가 들어가는 반투명의 그라데이션이 적용된 컴포넌트이다. 아직 이렇게 생긴걸 더 많이 만들어야 되기 때문에 시간이 좀걸린다. 위의 BioRuby 패키지에서 만들어주는 그래프보단 이쁘지 않은가??? ^^;;;

customcomponent
크기도 제각각, 겹쳐도 반투명이라 다 보이고 ^^;; (가장 기본적인 generic, box, line에 사용될 컴포넌트 예시)

만드는 방법은 JComponent를 상속받는 클래스를 하나 작성하고, 여기의 paintComponent() 메소드를 작성한다. paintComponent()에다가 Graphics2D를 이용해서 선도 긋고, setComposite를 이용해서 투명도도 설정해주고, GradientPaint를 이용해서 그라데이션 효과를 주고, 물론 디자인적인(동물적인) 감각을 활용해서 최대한 이쁘게 ^^;; 만들어서 일반 JButton이나 JLable처럼 Panel에 붙이면 된다.
반응형

댓글3

  • 비누인형 2008.02.18 13:36

    박스 그림이 예쁘네요. BioRuby 의 그것보다 훨씬 예쁩니다 ㅎㅎ 다만, 겹쳐져도 아래가 보인다는 건 득이 될 수도 실이 될 수도 있을 것 같습니다. Compiz 를 쓰면서 창을 투명하게 놓고 쓰는게 좋을 때도 있고 나쁜 때도 있더라구요. 꼭, 필요할 때에만 투명하게 만들 수 있다면, 그것도 좋을 것 같습니다 :)
    답글

    • hongiiv 2008.02.18 16:28

      앗 이쁘다고 칭찬해주시다니... 고맙습니다. 비누인형님의 블로그의 자주당하는 오해편의 K 선배님 : 역시, 네 안에는 여자가 살고 있음에 틀림없어. 이말을 보면 분명 탁월한 감각을 갖고 계신게 분명한데 ^^;; 이런 비누인형님이 이쁘다고 하시니.. (^__^)v 좀 더 다듬고 다음엔 Ruler를 만들어야 하는데, 이런~ 그래픽적인건 영 디자인 감각이 꽝이라 하루 종일 걸리는군요.ㅜㅜ

    • hongiiv 2008.02.18 16:29

      참 투명하게 만든건 혹시라도 겹치게 되는 상황에서 유연성을 위해서 그런건데,, 음 투명도를 조절할 수 있도록 컴포넌트 생성시 생성자를 하나 더 맹글어야겠네요.. ㅎㅎ 고맙습니다. 투명도 조절 꼭 넣어야겠군요.