0

JPanel内にJLabelがあります。JavaプログラムのGUIにNetbeansIDEを使用しています(フリーデザインで、レイアウトマネージャーはありません)。

実行時に、JLabelの一部を強調表示する必要があります。JLabelの一部を強調表示するには、次のように実行できます。JLabelの一部を強調表示する方法は?

実行時にそれを行う方法がわかりません。つまり、すでにJLabelがありますが、その目的でそのpaintComponent()メソッドをオーバーライドするにはどうすればよいですか?

4

1 に答える 1

0

これは、あなたが言及した投稿で 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);物事を単純化するために を使用していることに注意してください。使用しない場合は、強調表示する領域の正確な垂直位置を決定するために、追加の計算を行う必要があります。

于 2013-01-17T11:25:41.050 に答える