measurer.setPosition(endIndex + 1);
measurer = new LineBreakMeasurer(charIterator, BreakIterator.getCharacterInstance(Locale.ENGLISH), fontContext); } else { measurer.setPosition(0);
attributed.getIterator(null, prevPosition, newPosition); layout = new TextLayout(subIter, graphics.getFontRenderContext()); lineMeasurer.setPosition(newPosition);
lineMeasurer.setPosition(paragraphStart); while (lineMeasurer.getPosition() < paragraphEnd) { TextLayout layout = lineMeasurer.nextLayout(maxTextWidth); lineMeasurer.setPosition(paragraphStart); while (lineMeasurer.getPosition() < paragraphEnd) { TextLayout layout = lineMeasurer.nextLayout(maxTextWidth);
private TextLayout performWordBreak( final int start, final TextLayout textLayout, final LineBreakMeasurer lineBreakMeasurer, final int end ) { final TextLayout layout; if ( wordInstance.isBoundary( end ) != false ) { return textLayout; } int preceding = wordInstance.preceding( end ); if ( preceding == start ) { // single word does not fit on the line, so print full word lineBreakMeasurer.setPosition( start ); return lineBreakMeasurer.nextLayout( INFINITY, wordInstance.following( end ), false ); } else { lineBreakMeasurer.setPosition( start ); return lineBreakMeasurer.nextLayout( INFINITY, preceding, false ); } } }
private void drawErrorText(String errStr, int w, Graphics2D g2) { g2.setColor(colorModel.getColor("alertColor")); g2.setFont(new Font(res.getString("g2_Font"), Font.BOLD, 20)); g2.drawString(res.getString("ERROR"), 5, 20); AttributedString as = new AttributedString(errStr); as.addAttribute(TextAttribute.FONT, font12, 0, errStr.length()); AttributedCharacterIterator aci = as.getIterator(); FontRenderContext frc = g2.getFontRenderContext(); LineBreakMeasurer lbm = new LineBreakMeasurer(aci, frc); float x = 5, y = 25; lbm.setPosition(0); while (lbm.getPosition() < errStr.length()) { TextLayout tl = lbm.nextLayout(w - x - 5); if (!tl.isLeftToRight()) { x = w - tl.getAdvance(); } tl.draw(g2, x, y += tl.getAscent()); y += tl.getDescent() + tl.getLeading(); } }
final AttributedCharacterIterator iterator = styledText.getIterator(); final LineBreakMeasurer measurer = new LineBreakMeasurer(iterator, frc); measurer.setPosition(0); float y = 0; while (measurer.getPosition() < this.currentText.length()) {
public void paint(Graphics g) { super.paintComponent(g); Graphics2D g2 = (Graphics2D) g; FontRenderContext frc = g2.getFontRenderContext(); LineBreakMeasurer measurer = new LineBreakMeasurer(m_iterator, frc); measurer.setPosition(m_start); float y = 0; while (measurer.getPosition() < m_end) { double ix = Math.sqrt((m_width / 2 - y) * y); float x = m_width / 2.0F - (float) ix; int width = (int) ix * 2; TextLayout layout = measurer.nextLayout(width); y += layout.getAscent(); float dx = layout.isLeftToRight() ? 0 : width - layout.getAdvance(); layout.draw(g2, x + dx, y); y += layout.getDescent() + layout.getLeading(); } }
public LineBreakIterator( ParagraphRenderBox box, FontRenderContext fontRenderContext, AttributedCharacterIterator ci ) { this.wrappingWidth = (float) StrictGeomUtility.toExternalValue( box.getCachedWidth() ); this.justifiedLayout = ElementAlignment.JUSTIFY.equals( box.getStyleSheet().getStyleProperty( ElementStyleKeys.ALIGNMENT ) ); this.ci = ci; this.lineBreakMeasurer = new LineBreakMeasurer( ci, fontRenderContext ); this.lineBreakMeasurer.setPosition( ci.getBeginIndex() ); }
// Create Font object with Font attribute (e.g. Font family, Font size, etc) for calculation java.awt.Font currFont = new java.awt.Font(fontName, 0, fontSize); AttributedString attrStr = new AttributedString(cellValue); attrStr.addAttribute(TextAttribute.FONT, currFont); // Use LineBreakMeasurer to count number of lines needed for the text FontRenderContext frc = new FontRenderContext(null, true, true); LineBreakMeasurer measurer = new LineBreakMeasurer(attrStr.getIterator(), frc); int nextPos = 0; int lineCnt = 0; while (measurer.getPosition() < cellValue.length()) { nextPos = measurer.nextOffset(mergedCellWidth); // mergedCellWidth is the max width of each line lineCnt++; measurer.setPosition(nextPos); } Row currRow = currSht.getRow(rowNum); currRow.setHeight((short)(currRow.getHeight() * lineCnt)); // The above solution doesn't handle the newline character, i.e. "\n", and only // tested under horizontal merged cells.
final AttributedCharacterIterator iterator = styledText.getIterator(); final LineBreakMeasurer measurer = new LineBreakMeasurer(iterator, frc); measurer.setPosition(0); float textY = (float) y; while (measurer.getPosition() < text.length()) {
measurer.setPosition(iterator.getBeginIndex());
final AttributedCharacterIterator iterator = styledText.getIterator(); final LineBreakMeasurer measurer = new LineBreakMeasurer(iterator, frc); measurer.setPosition(0);
private static int countLines(JTextArea textArea) { AttributedString text = new AttributedString(textArea.getText()); text.addAttribute(TextAttribute.FONT, textArea.getFont()); FontRenderContext frc = textArea.getFontMetrics(textArea.getFont()).getFontRenderContext(); AttributedCharacterIterator charIt = text.getIterator(); LineBreakMeasurer lineMeasurer = new LineBreakMeasurer(charIt, frc); Insets textAreaInsets = textArea.getInsets(); float formatWidth = textArea.getWidth() - textAreaInsets.left - textAreaInsets.right; lineMeasurer.setPosition(charIt.getBeginIndex()); int noLines = 0; while (lineMeasurer.getPosition() < charIt.getEndIndex()) { lineMeasurer.nextLayout(formatWidth); noLines++; } return noLines; }
measurer.setPosition(m_start);
pos = measurer.nextOffset(cellWidth); numLines++; measurer.setPosition(pos);
pos = measurer.nextOffset(cellWidth); numLines++; measurer.setPosition(pos);
float firstLineHeight = 0; LineBreakMeasurer lbm = new LineBreakMeasurer(asi, frc); lbm.setPosition(asi.getBeginIndex()); if (lbm.getPosition() < asi.getEndIndex()) { TextLayout tl = lbm.nextLayout(width); lbm.setPosition(asi.getBeginIndex()); while (lbm.getPosition() < asi.getEndIndex()) { TextLayout tl = lbm.nextLayout(width);
float drawPosY = curY; lineMeasurer.setPosition(paragraphStart);
nextOffset = lineBreakMeasurer.nextOffset(contentWidth, Integer.MAX_VALUE, false); lineBreakMeasurer.setPosition(nextOffset); int lineEnd = nextOffset;