MetalTreeUI

MetalTreeUI

TreeUI의 메탈 Look and Feel 구현이에요. MetalTreeUI는 노드 사이의 간격과 구분선을 시각적으로 렌더링하는 방법을 구성할 수 있게 해줘요.

다음 힌트가 지원돼요: Angled, Horizontal, None.

힌트 설명
Angled 자식을 부모에 연결하는 선이 그려져요. 루트 노드 처리에 대해서는 JTree.setRootVisible(boolean)JTree.setShowsRootHandles(boolean)을 참조하세요.
Horizontal 루트 노드의 자식을 나누는 수평선이 그려져요.
None 노드 사이에 시각적 표시를 그리지 않아요.

JTree에서 TreeUI를 얻어 MetalTreeUI 인스턴스로 캐스팅하는 것은 일반적으로 비현실적이므로, 클라이언트 속성 JTree.lineStyle을 통해 이 속성을 활성화해요. 예를 들어 Horizontal 스타일로 전환하려면 이렇게 해요.

tree.putClientProperty("JTree.lineStyle", "Horizontal");

기본값은 Angled예요.

출처: Java API Reference

본문

MetalTreeUI는 트리(JTree)에 메탈 Look and Feel를 적용하며, 노드 간의 연결선 스타일을 지원해요.

대표적인 시그니처는 다음과 같아요.

public MetalTreeUI()
public static ComponentUI createUI(JComponent x)
protected void decodeLineStyle(Object lineStyleFlag)
protected boolean isLocationInExpandControl(int row, int rowLevel, int mouseX, int mouseY)
protected void paintHorizontalSeparators(Graphics g, JComponent c)

주요 메서드의 동작을 살펴볼게요.

  • decodeLineStyle(Object lineStyleFlag) — 클라이언트 속성으로 전달된 문자열과 내부 표현(현재는 int) 사이를 변환해요.
  • isLocationInExpandControl(int row, int rowLevel, int mouseX, int mouseY) — X 좌표 mouseX, Y 좌표 mouseY의 점이 펼침 컨트롤(expand control) 안에 있으면 true를 반환해요.
  • paintHorizontalSeparators(Graphics g, JComponent c) — 수평 구분선을 그려요.

더 알아보기