0

我在 JPanel 中有一个 JLabel。我将 Netbeans IDE 用于我的 java 程序的 GUI(免费设计,没有布局管理器)。

在运行时,我需要突出显示我的 JLabel 的一部分。可以像这里所说的那样突出 JLabel 的一部分:如何突出 JLabel 的一部分?

我不知道如何在运行时做到这一点,我的意思是我已经有一个 JLabel,现在我该如何覆盖它的 paintComponent() 方法呢?

4

1 回答 1

0

这是 Tikhon Jelvis 在您提到的帖子中给出的答案的说明性示例,您只需添加一些字段(在此示例中startend)以指示要突出显示的区域,并使用一种方法(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 回答