AttributedString str = new AttributedString(types); str.addAttribute(TextAttribute.FONT, boxTextFont); TextMeasurer measure = new TextMeasurer(str.getIterator(), g.getFontRenderContext()); int breakIndex = measure.getLineBreakIndex(0, availableWidth); if (breakIndex < types.length()) { str = new AttributedString(types); str.addAttribute(TextAttribute.FONT, boxTextFontNarrow); measure = new TextMeasurer(str.getIterator(), g.getFontRenderContext()); breakIndex = measure.getLineBreakIndex(0, availableWidth); TextLayout layout = measure.getLayout(0, breakIndex); g.setColor(getBoxTextColor()); layout.draw(g, x, y + (h - boxTextHeight) / 2 + boxTextHeight - 1);
// Compensate for the 50,50 of the drawString position g.translate(50, 50); g.setColor(Color.RED); Rectangle2D wrongBounds = fm.getStringBounds( text.getIterator(), 0, text.getIterator().getEndIndex(), g); g.draw(wrongBounds); System.out.println("wrong: "+wrongBounds); g.setColor(Color.BLUE); AttributedCharacterIterator iterator = text.getIterator(); TextMeasurer tm = new TextMeasurer(iterator, g.getFontRenderContext()); Rectangle2D rightBounds = tm.getLayout(0, iterator.getEndIndex()).getBounds(); g.draw(rightBounds); System.out.println("right: "+rightBounds);
public TextLayout textLayout(TextMeasurer tm){ if (tm== null) throw new IllegalArgumentException("tm==null"); TextLayout tl = tm.getLayout(0, length()); return tl; }
public TextLayout textLayout(FontRenderContext frc){ if (frc== null) throw new IllegalArgumentException("frc==null"); TextMeasurer tm = new TextMeasurer(getIterator(),frc); return textLayout(tm); }
"AWT-EventQueue-0" prio=10 tid=0x00007ff38028c000 nid=0x5f74 runnable [0x00007ff3745db000] java.lang.Thread.State: RUNNABLE at javax.swing.text.AbstractDocument$BranchElement.getElementIndex(AbstractDocument.java:2389) at javax.swing.text.CompositeView.getViewIndexAtPosition(CompositeView.java:579) at javax.swing.text.FlowView$LogicalView.getViewIndexAtPosition(FlowView.java:692) at javax.swing.text.CompositeView.getViewIndex(CompositeView.java:497) at javax.swing.text.TextLayoutStrategy$AttributedSegment.getAttribute(TextLayoutStrategy.java:520) at sun.text.bidi.BidiBase.setPara(BidiBase.java:2711) at java.text.Bidi.<init>(Bidi.java:134) at java.awt.font.TextMeasurer.initAll(TextMeasurer.java:208) at java.awt.font.TextMeasurer.<init>(TextMeasurer.java:167) at java.awt.font.LineBreakMeasurer.<init>(LineBreakMeasurer.java:310)
AttributedString str = new AttributedString(nameStr); str.addAttribute(TextAttribute.FONT, boxTextFont); TextMeasurer measure = new TextMeasurer(str.getIterator(), g.getFontRenderContext()); int breakIndex = measure.getLineBreakIndex(0, availableWidth); if (breakIndex < nameStr.length()) { str = new AttributedString(nameStr); str.addAttribute(TextAttribute.FONT, boxTextFontNarrow); measure = new TextMeasurer(str.getIterator(), g.getFontRenderContext()); breakIndex = measure.getLineBreakIndex(0, availableWidth); TextLayout layout = measure.getLayout(0, breakIndex); g.setColor(getBoxTextColor()); layout.draw(g, x, y + boxTextOffset + boxTextHeight - 1);