2014-09-03 10 views
1

은 가능한 Swing이 뭔가를 달성하는 것입니다 : 여기 문자를 부분적으로 강조 표시 할 수 있습니까?

enter image description here

공지 사항이 부분적으로 채색된다.

나는 DefaultHighlighter 클래스로는 불가능하다고 알고 있습니다. (JTextArea에 표시되는 텍스트)

Swing의 경우에만이를 달성하거나 해결책을 적용해야하는 모든 해결책은 CSS입니까?

편집 : 그 스윙 할 수없는 경우

, 아래의 태그와 모든 솔루션?

+0

CSS를 사용해도 할 수 없다고 생각합니다. 어쩌면 당신은 이미 – Leo

답변

4

Java 2D에서는 이와 비슷한 것이 가능하지만 JTextArea에서는 그렇지 않습니다. 그래서 이것을 프레임으로 렌더링하는 코드를 만들 수는 있지만 텍스트 편집기에서이 지원을 쉽게 추가 할 수있는 방법을 찾지 못할 것이라고 생각합니다. 글쎄, 글쎄, 텍스트 편집기에서 embed an image 일 수는 있겠지만, 필요).

[EDIT] 가라오케 플레이어의 텍스트 디스플레이의 경우 Java 2D가 좋습니다. 자바 에디터 API는 당신의 방식대로 될 것입니다. 여기

은 그라디언트로 텍스트를 렌더링하는 예입니다

public void sayWorld(Graphics2D g2D, int x, int y, boolean shear) { 
     final String txt = "Hello World!"; 

     // gradient color from blue to red 
     GradientPaint gp = new GradientPaint((float)x, (float)y, Color.blue, 
          x+100, y+20, Color.red); 
     g2D.setPaint(gp); 
     if (shear) g2D.shear(-0.5,0.0); 
     else  g2D.shear(+0.5, 0); 
     g2D.drawString(txt, x, y); 

     FontRenderContext frc = new FontRenderContext(null,false,false); 

     TextLayout tl = new TextLayout(txt, font, frc); 
     AffineTransform textAt = new AffineTransform(); 
     //textAt.translate(0, (float)tl.getBounds().getHeight()); 
     textAt.translate(x,y); 
     //textAt.shear(-0.5,0.0); 

     Shape outline = tl.getOutline(textAt); 
     g2D.setColor(Color.yellow); 
     BasicStroke wideStroke = new BasicStroke(2); 
     g2D.setStroke(wideStroke); 
     g2D.draw(outline); 
    } 

(source) 기본적으로

, 당신은 가사 한 줄의 텍스트 레이아웃을 얻을 렌더링, 다음에 그 변환 모양 (= 각 글자의 윤곽선). 그런 다음이 모양을 클립 영역으로 사용하여 그라디언트를 렌더링 할 수 있습니다.

경우에 따라 렌더링 할 가장 긴 텍스트 줄의 두 배에 달하는 급격한 그라디언트가 필요합니다. 필요에 따라 텍스트 대신 그라디언트를 변경하려면 적절하게 이동하십시오.

+0

이미지를 생성해야 할 것입니다. 저는 이미 2D에 대해 생각해 왔지만, 그것은 로직을 위해 복잡한 방법이 될 것입니다. 태그를 편집해야 할 수도 있습니다. –

+0

"논리가 너무 복잡하다"는 말을 이해하지 못합니다. 그냥 텍스트에서 색상 범위를 더한 경로를 얻은 다음 경로를 클립 영역으로 사용하여 사각형을 채우시겠습니까? –

+0

가라오케 플레이어와 같은 것입니다.이 솔루션을 채택하면 동기화가 해제 될 수 있습니다. 타이밍은 나노 초 정밀도로 조정됩니다. 또한 스크롤은 고통이 될 것입니다. –

관련 문제