Insets2DDouble insets = getInsets();
Insets2D.Double insets = getInsets();
    protected void drawText(Graphics2D g) {        if (getText() != null || isEditable()) {                        Font font = getFont();boolean isUnderlined = FONT_UNDERLINED.get(this);            Insets2DDouble insets = getInsets();            Rectangle2D.Double textRect = new Rectangle2D.Double(            bounds.x + insets.left,            bounds.y + insets.top,            bounds.width - insets.left - insets.right,            bounds.height - insets.top - insets.bottom            );            float leftMargin = (float) textRect.x;            float rightMargin = (float) Math.max(leftMargin + 1, textRect.x + textRect.width);            float verticalPos = (float) textRect.y;            if (leftMargin < rightMargin) {                float tabWidth = (float) (getTabSize() * g.getFontMetrics(font).charWidth('m'));                float[] tabStops = new float[(int) (textRect.width / tabWidth)];                for (int i=0; i < tabStops.length; i++) {                    tabStops[i] = (float) (textRect.x + (int) (tabWidth * (i + 1)));                }                                if (getText() != null) {                    Shape savedClipArea = g.getClip();                    g.clip(textRect);                                        String[] paragraphs = getText().split("\n");//Strings.split(getText(), '\n');                    for (int i = 0; i < paragraphs.length; i++) {                        if (paragraphs[i].length() == 0) paragraphs[i] = " ";                        AttributedString as = new AttributedString(paragraphs[i]);                        as.addAttribute(TextAttribute.FONT, font);                        if (isUnderlined) {                        as.addAttribute(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_LOW_ONE_PIXEL);                        }                        int tabCount = new StringTokenizer(paragraphs[i], "\t").countTokens() - 1;                        verticalPos = drawParagraph(g, as.getIterator(), verticalPos, leftMargin, rightMargin, tabStops, tabCount);                        if (verticalPos > textRect.y + textRect.height) {                            break;                        }                    }                    g.setClip(savedClipArea);                }            }                        if (leftMargin >= rightMargin || verticalPos > textRect.y + textRect.height) {                g.setColor(Color.red);                g.setStroke(dashes);                g.draw(new Line2D.Double(textRect.x, textRect.y + textRect.height - 1, textRect.x + textRect.width - 1, textRect.y + textRect.height - 1));            }        }    }