여기에 언급 한 게시물에서 Tikhon Jelvis가 제공 한 답변의 예시 예입니다. 강조 표시 할 영역을 나타내는 데 일부 필드 (이 예에서는 start
및 end
)를 추가하고
import java.awt.Color;
import java.awt.FontMetrics;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Main
{
public static void main(String[] argv)
{
JFrame frame = new JFrame("Highlighting");
frame.setSize(300, 100);
Label label = new Label();
label.setText("Money does not buy happiness");
label.setVerticalAlignment(JLabel.TOP);
label.highlightRegion(3, 15);
frame.add(label);
frame.setVisible(true);
}
static class Label extends JLabel
{
private static final long serialVersionUID = 1L;
private int start;
private int end;
@Override
public void paint(Graphics g)
{
FontMetrics fontMetrics = g.getFontMetrics();
String startString = getText().substring(0, start);
String text = getText().substring(start, end);
int startX = fontMetrics.stringWidth(startString);
int startY = 0;
int length = fontMetrics.stringWidth(text);
int height = fontMetrics.getHeight();
g.setColor(new Color(0x33, 0x66, 0xFF, 0x66));
g.fillRect(startX, startY, length, height);
super.paint(g);
}
public void highlightRegion(int start, int end)
{
this.start = start;
this.end = end;
}
}
}
주의 일을 단순화하기 label.setVerticalAlignment(JLabel.TOP);
의 사용 : (이 예에서는 highlightRegion
)는 이러한 필드를 설정합니다. 당신이 그것을 사용하지 않는다면 당신은 강조 될 지역의 정확한 수직 위치를 결정하기 위해 여분의 계산을 할 필요가 있습니다.
테두리가없는 JTextField를 사용하고 투명하게 설정하는 것이 더 쉬울 것입니다. - IMHO – MadProgrammer
내 문제는 강조 표시를하는 방법이 아니라 런타임시 해당 페이지에서 말한 것을 수행하는 방법입니다 ... – Soheil
텍스트 만 변경 html로 내부, 한번도 시도한 적이 없는데 어쩌면 재귀() – Zemzela