これは、あなたが言及した投稿で Tikhon Jelvis によって与えられた回答の実例です。必要なのは、強調表示する領域を示すためにいくつかのフィールド (この例ではstart
およびend
) を追加し、メソッド (highlightRegion
この例では) を使用することだけです。次のフィールドを設定します。
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);
物事を単純化するために を使用していることに注意してください。使用しない場合は、強調表示する領域の正確な垂直位置を決定するために、追加の計算を行う必要があります。