은 가능한 Swing
이 뭔가를 달성하는 것입니다 : 여기 문자를 부분적으로 강조 표시 할 수 있습니까?
공지 사항이 부분적으로 채색된다.
나는 DefaultHighlighter
클래스로는 불가능하다고 알고 있습니다. (JTextArea
에 표시되는 텍스트)
Swing
의 경우에만이를 달성하거나 해결책을 적용해야하는 모든 해결책은 CSS
입니까?
편집 : 그 스윙 할 수없는 경우
, 아래의 태그와 모든 솔루션?
은 가능한 Swing
이 뭔가를 달성하는 것입니다 : 여기 문자를 부분적으로 강조 표시 할 수 있습니까?
공지 사항이 부분적으로 채색된다.
나는 DefaultHighlighter
클래스로는 불가능하다고 알고 있습니다. (JTextArea
에 표시되는 텍스트)
Swing
의 경우에만이를 달성하거나 해결책을 적용해야하는 모든 해결책은 CSS
입니까?
편집 : 그 스윙 할 수없는 경우
, 아래의 태그와 모든 솔루션?
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) 기본적으로
, 당신은 가사 한 줄의 텍스트 레이아웃을 얻을 렌더링, 다음에 그 변환 모양 (= 각 글자의 윤곽선). 그런 다음이 모양을 클립 영역으로 사용하여 그라디언트를 렌더링 할 수 있습니다.
경우에 따라 렌더링 할 가장 긴 텍스트 줄의 두 배에 달하는 급격한 그라디언트가 필요합니다. 필요에 따라 텍스트 대신 그라디언트를 변경하려면 적절하게 이동하십시오.
이미지를 생성해야 할 것입니다. 저는 이미 2D에 대해 생각해 왔지만, 그것은 로직을 위해 복잡한 방법이 될 것입니다. 태그를 편집해야 할 수도 있습니다. –
"논리가 너무 복잡하다"는 말을 이해하지 못합니다. 그냥 텍스트에서 색상 범위를 더한 경로를 얻은 다음 경로를 클립 영역으로 사용하여 사각형을 채우시겠습니까? –
가라오케 플레이어와 같은 것입니다.이 솔루션을 채택하면 동기화가 해제 될 수 있습니다. 타이밍은 나노 초 정밀도로 조정됩니다. 또한 스크롤은 고통이 될 것입니다. –
CSS를 사용해도 할 수 없다고 생각합니다. 어쩌면 당신은 이미 – Leo