List of usage examples for java.awt Graphics2D getFontMetrics
public FontMetrics getFontMetrics()
From source file:Main.java
public static void main(String[] args) throws Exception { String text = "java2s.com"; BufferedImage img = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB); Graphics2D g2d = img.createGraphics(); Font font = new Font("Arial", Font.PLAIN, 48); g2d.setFont(font);//from w w w . j a v a 2s . co m FontMetrics fm = g2d.getFontMetrics(); int width = fm.stringWidth(text); int height = fm.getHeight(); g2d.dispose(); img = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); g2d = img.createGraphics(); g2d.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY); g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2d.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY); g2d.setRenderingHint(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_ENABLE); g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON); g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); g2d.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE); g2d.setFont(font); fm = g2d.getFontMetrics(); g2d.setColor(Color.BLACK); g2d.drawString(text, 0, fm.getAscent()); g2d.dispose(); ImageIO.write(img, "png", new File("Text.png")); }
From source file:WriteImageType.java
static public void main(String args[]) throws Exception { try {/*from w w w . j a va2 s.c o m*/ int width = 200, height = 200; // TYPE_INT_ARGB specifies the image format: 8-bit RGBA packed // into integer pixels BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); Graphics2D ig2 = bi.createGraphics(); Font font = new Font("TimesRoman", Font.BOLD, 20); ig2.setFont(font); String message = "www.java2s.com!"; FontMetrics fontMetrics = ig2.getFontMetrics(); int stringWidth = fontMetrics.stringWidth(message); int stringHeight = fontMetrics.getAscent(); ig2.setPaint(Color.black); ig2.drawString(message, (width - stringWidth) / 2, height / 2 + stringHeight / 4); ImageIO.write(bi, "PNG", new File("c:\\yourImageName.PNG")); ImageIO.write(bi, "JPEG", new File("c:\\yourImageName.JPG")); ImageIO.write(bi, "gif", new File("c:\\yourImageName.GIF")); ImageIO.write(bi, "BMP", new File("c:\\yourImageName.BMP")); } catch (IOException ie) { ie.printStackTrace(); } }
From source file:MainClass.java
public static void main(String[] args) throws Exception { Document document = new Document(new Rectangle(100, 100)); PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("sun_tutorial_with_text.pdf")); document.open();/*from w w w . j av a 2 s . c om*/ PdfContentByte cb = writer.getDirectContent(); PdfTemplate tp = cb.createTemplate(100, 100); DefaultFontMapper mapper = new DefaultFontMapper(); mapper.insertDirectory("c:/windows/fonts"); String name; Map map = mapper.getMapper(); for (Iterator i = map.keySet().iterator(); i.hasNext();) { name = (String) i.next(); System.out.println(name + ": " + ((DefaultFontMapper.BaseFontParameters) map.get(name)).fontName); } Graphics2D g2 = tp.createGraphics(100, 100, mapper); g2.setColor(Color.black); java.awt.Font thisFont = new java.awt.Font("Garamond", java.awt.Font.PLAIN, 18); g2.setFont(thisFont); String pear = "Pear"; FontMetrics metrics = g2.getFontMetrics(); int width = metrics.stringWidth(pear); g2.drawString(pear, (100 - width) / 2, 20); g2.dispose(); cb.addTemplate(tp, 0, 0); document.close(); }
From source file:com.vitco.Main.java
public static void main(String[] args) throws Exception { // display version number on splash screen final SplashScreen splash = SplashScreen.getSplashScreen(); if (splash != null) { Graphics2D g = splash.createGraphics(); if (g != null) { g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB); Font font = Font .createFont(Font.TRUETYPE_FONT, new SaveResourceLoader("resource/font/arcade.ttf").asInputStream()) .deriveFont(Font.PLAIN, 42f); g.setFont(font);/*from w ww. ja v a2s. c o m*/ //g.setFont(g.getFont().deriveFont(9f)); g.setColor(VitcoSettings.SPLASH_SCREEN_OVERLAY_TEXT_COLOR); int width = g.getFontMetrics().stringWidth(VitcoSettings.VERSION_ID); g.drawString(VitcoSettings.VERSION_ID, 400 - 20 - width, 110); splash.update(); g.dispose(); } } // the JIDE license SaveResourceLoader saveResourceLoader = new SaveResourceLoader("resource/jidelicense.txt"); if (!saveResourceLoader.error) { String[] jidelicense = saveResourceLoader.asLines(); if (jidelicense.length == 3) { com.jidesoft.utils.Lm.verifyLicense(jidelicense[0], jidelicense[1], jidelicense[2]); } } // check if we are in debug mode if ((args.length > 0) && args[0].equals("debug")) { ErrorHandler.setDebugMode(); debug = true; } // build the application final ConfigurableApplicationContext context = new ClassPathXmlApplicationContext( "com/vitco/glue/config.xml"); // for debugging if (debug) { ((ActionManager) context.getBean("ActionManager")).performValidityCheck(); ((ComplexActionManager) context.getBean("ComplexActionManager")).performValidityCheck(); } // open vsd file when program is started with "open with" MainMenuLogic mainMenuLogic = ((MainMenuLogic) context.getBean("MainMenuLogic")); for (String arg : args) { if (arg.endsWith(".vsd")) { File file = new File(arg); if (file.exists() && !file.isDirectory()) { mainMenuLogic.openFile(file); break; } } } // perform shortcut check ((ShortcutManager) context.getBean("ShortcutManager")).doSanityCheck(debug); // // test console // final Console console = ((Console) context.getBean("Console")); // new Thread() { // public void run() { // while (true) { // console.addLine("text"); // try { // sleep(2000); // } catch (InterruptedException e) { // //e.printStackTrace(); // } // } // } // }.start(); // add a shutdown hook Runtime.getRuntime().addShutdownHook(new Thread() { public void run() { // make reference so Preferences object doesn't get destroyed Preferences pref = ((Preferences) context.getBean("Preferences")); // trigger @PreDestroy context.close(); // store the preferences (this needs to be done here, b/c // some PreDestroys are used to store preferences!) pref.save(); } }); }
From source file:org.signserver.admin.gui.SignServerAdminGUIApplication.java
/** * Main method launching the application. *//*w ww .j a va 2 s. co m*/ public static void main(String[] args) { LOG.debug("SignServer Administration GUI startup"); final SplashScreen splash = SplashScreen.getSplashScreen(); if (splash == null) { LOG.debug("No splash screen available."); } else { // Fill in version and copyright information final Graphics2D image = splash.createGraphics(); image.setPaint(Color.BLACK); image.setFont(new Font("Arial", Font.BOLD, 14)); image.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_GASP); final ResourceMap resourceMap = getApplication().getContext() .getResourceMap(SignServerAdminGUIApplicationAboutBox.class); final String version = "Version " + resourceMap.getString("appVendorLabel1.text"); ; image.drawString(version, 512 - image.getFontMetrics().stringWidth(version), 215); image.setPaint(Color.DARK_GRAY); image.drawString(resourceMap.getString("appCopyright.text"), 12, 392); splash.update(); } try { // Parse the command line final CommandLine line = new GnuParser().parse(OPTIONS, args); if (line.hasOption(OPTION_HELP)) { printUsage(); } else { if (line.hasOption(OPTION_WS)) { protocol = Protocol.WS; } else { if (isNamingContextAvailable()) { protocol = Protocol.EJB; } else { JOptionPane.showMessageDialog(null, "Application server libraries not detected." + "\n\nTo connect to a locally running SignServer instance " + "\nplease append the appropriate application server " + "\nJAR-files and if needed a jndi.properties file." + "\n\nTo connect using web services invoke this command " + "\nwith the argument \"-ws\"."); protocol = Protocol.WS; } } if (line.hasOption(OPTION_CONNECTFILE)) { connectFile = new File(line.getOptionValue(OPTION_CONNECTFILE)); } if (line.hasOption(OPTION_DEFAULTCONNECTFILE)) { defaultConnectFile = new File(line.getOptionValue(OPTION_DEFAULTCONNECTFILE)); } if (line.hasOption(OPTION_BASEDIR)) { baseDir = new File(line.getOptionValue(OPTION_BASEDIR)); } try { launch(SignServerAdminGUIApplication.class, args); } catch (Exception ex) { displayException(ex); } } } catch (ParseException ex) { throw new IllegalArgumentException(ex.getLocalizedMessage(), ex); } }
From source file:org.tinymediamanager.TinyMediaManager.java
/** * The main method.//from w ww . ja va 2 s .com * * @param args * the arguments */ public static void main(String[] args) { // simple parse command line if (args != null && args.length > 0) { LOGGER.debug("TMM started with: " + Arrays.toString(args)); TinyMediaManagerCMD.parseParams(args); System.setProperty("java.awt.headless", "true"); } else { // no cmd params found, but if we are headless - display syntax String head = System.getProperty("java.awt.headless"); if (head != null && head.equals("true")) { LOGGER.info("TMM started 'headless', and without params -> displaying syntax "); TinyMediaManagerCMD.printSyntax(); System.exit(0); } } // check if we have write permissions to this folder try { RandomAccessFile f = new RandomAccessFile("access.test", "rw"); f.close(); Files.deleteIfExists(Paths.get("access.test")); } catch (Exception e2) { String msg = "Cannot write to TMM directory, have no rights - exiting."; if (!GraphicsEnvironment.isHeadless()) { JOptionPane.showMessageDialog(null, msg); } else { System.out.println(msg); } System.exit(1); } // HACK for Java 7 and JavaFX not being in boot classpath // In Java 8 and on, this is installed inside jre/lib/ext // see http://bugs.java.com/bugdatabase/view_bug.do?bug_id=8003171 and references // so we check if it is already existent in "new" directory, and if not, load it via reflection ;o) String dir = new File(LaunchUtil.getJVMPath()).getParentFile().getParent(); // bin, one deeper File jfx = new File(dir, "lib/ext/jfxrt.jar"); if (!jfx.exists()) { // java 7 jfx = new File(dir, "lib/jfxrt.jar"); if (jfx.exists()) { try { TmmOsUtils.addPath(jfx.getAbsolutePath()); } catch (Exception e) { LOGGER.debug("failed to load JavaFX - using old styles..."); } } } if (Globals.isDebug()) { ClassLoader cl = ClassLoader.getSystemClassLoader(); URL[] urls = ((URLClassLoader) cl).getURLs(); LOGGER.info("=== DEBUG CLASS LOADING ============================="); for (URL url : urls) { LOGGER.info(url.getFile()); } } LOGGER.info("====================================================="); LOGGER.info("=== tinyMediaManager (c) 2012-2016 Manuel Laggner ==="); LOGGER.info("====================================================="); LOGGER.info("tmm.version : " + ReleaseInfo.getRealVersion()); if (Globals.isDonator()) { LOGGER.info("tmm.supporter : THANKS FOR DONATING - ALL FEATURES UNLOCKED :)"); } LOGGER.info("os.name : " + System.getProperty("os.name")); LOGGER.info("os.version : " + System.getProperty("os.version")); LOGGER.info("os.arch : " + System.getProperty("os.arch")); LOGGER.trace("network.id : " + License.getMac()); LOGGER.info("java.version : " + System.getProperty("java.version")); if (Globals.isRunningJavaWebStart()) { LOGGER.info("java.webstart : true"); } if (Globals.isRunningWebSwing()) { LOGGER.info("java.webswing : true"); } // START character encoding debug debugCharacterEncoding("default encoding : "); System.setProperty("file.encoding", "UTF-8"); System.setProperty("sun.jnu.encoding", "UTF-8"); Field charset; try { // we cannot (re)set the properties while running inside JVM // so we trick it to reread it by setting them to null ;) charset = Charset.class.getDeclaredField("defaultCharset"); charset.setAccessible(true); charset.set(null, null); } catch (Exception e) { LOGGER.warn("Error resetting to UTF-8", e); } debugCharacterEncoding("set encoding to : "); // END character encoding debug // set GUI default language Locale.setDefault(Utils.getLocaleFromLanguage(Globals.settings.getLanguage())); LOGGER.info("System language : " + System.getProperty("user.language") + "_" + System.getProperty("user.country")); LOGGER.info( "GUI language : " + Locale.getDefault().getLanguage() + "_" + Locale.getDefault().getCountry()); LOGGER.info("Scraper language : " + MovieModuleManager.MOVIE_SETTINGS.getScraperLanguage()); LOGGER.info("TV Scraper lang : " + TvShowModuleManager.SETTINGS.getScraperLanguage()); // start EDT EventQueue.invokeLater(new Runnable() { public void run() { boolean newVersion = !Globals.settings.isCurrentVersion(); // same snapshots/svn considered as "new", for upgrades try { Thread.setDefaultUncaughtExceptionHandler(new Log4jBackstop()); if (!GraphicsEnvironment.isHeadless()) { Thread.currentThread().setName("main"); } else { Thread.currentThread().setName("headless"); LOGGER.debug("starting without GUI..."); } Toolkit tk = Toolkit.getDefaultToolkit(); tk.addAWTEventListener(TmmWindowSaver.getInstance(), AWTEvent.WINDOW_EVENT_MASK); if (!GraphicsEnvironment.isHeadless()) { setLookAndFeel(); } doStartupTasks(); // suppress logging messages from betterbeansbinding org.jdesktop.beansbinding.util.logging.Logger.getLogger(ELProperty.class.getName()) .setLevel(Level.SEVERE); // init ui logger TmmUILogCollector.init(); LOGGER.info("====================================================="); // init splash SplashScreen splash = null; if (!GraphicsEnvironment.isHeadless()) { splash = SplashScreen.getSplashScreen(); } Graphics2D g2 = null; if (splash != null) { g2 = splash.createGraphics(); if (g2 != null) { Font font = new Font("Dialog", Font.PLAIN, 14); g2.setFont(font); } else { LOGGER.debug("got no graphics from splash"); } } else { LOGGER.debug("no splash found"); } if (g2 != null) { updateProgress(g2, "starting tinyMediaManager", 0); splash.update(); } LOGGER.info("starting tinyMediaManager"); // upgrade check String oldVersion = Globals.settings.getVersion(); if (newVersion) { if (g2 != null) { updateProgress(g2, "upgrading to new version", 10); splash.update(); } UpgradeTasks.performUpgradeTasksBeforeDatabaseLoading(oldVersion); // do the upgrade tasks for the old version Globals.settings.setCurrentVersion(); Globals.settings.saveSettings(); } // proxy settings if (Globals.settings.useProxy()) { LOGGER.info("setting proxy"); Globals.settings.setProxy(); } // MediaInfo ///////////////////////////////////////////////////// if (g2 != null) { updateProgress(g2, "loading MediaInfo libs", 20); splash.update(); } MediaInfoUtils.loadMediaInfo(); // load modules ////////////////////////////////////////////////// if (g2 != null) { updateProgress(g2, "loading movie module", 30); splash.update(); } TmmModuleManager.getInstance().startUp(); TmmModuleManager.getInstance().registerModule(MovieModuleManager.getInstance()); TmmModuleManager.getInstance().enableModule(MovieModuleManager.getInstance()); if (g2 != null) { updateProgress(g2, "loading TV show module", 40); splash.update(); } TmmModuleManager.getInstance().registerModule(TvShowModuleManager.getInstance()); TmmModuleManager.getInstance().enableModule(TvShowModuleManager.getInstance()); if (g2 != null) { updateProgress(g2, "loading plugins", 50); splash.update(); } // just instantiate static - will block (takes a few secs) PluginManager.getInstance(); if (ReleaseInfo.isSvnBuild()) { PluginManager.loadClasspathPlugins(); } // do upgrade tasks after database loading if (newVersion) { if (g2 != null) { updateProgress(g2, "upgrading database to new version", 70); splash.update(); } UpgradeTasks.performUpgradeTasksAfterDatabaseLoading(oldVersion); } // launch application //////////////////////////////////////////// if (g2 != null) { updateProgress(g2, "loading ui", 80); splash.update(); } if (!GraphicsEnvironment.isHeadless()) { MainWindow window = new MainWindow("tinyMediaManager / " + ReleaseInfo.getRealVersion()); // finished //////////////////////////////////////////////////// if (g2 != null) { updateProgress(g2, "finished starting :)", 100); splash.update(); } // write a random number to file, to identify this instance (for // updater, tracking, whatsoever) Utils.trackEvent("startup"); TmmWindowSaver.getInstance().loadSettings(window); window.setVisible(true); // wizard for new user if (Globals.settings.newConfig) { Globals.settings.writeDefaultSettings(); // now all plugins are resolved - write again defaults! TinyMediaManagerWizard wizard = new TinyMediaManagerWizard(); wizard.setVisible(true); } // show changelog if (newVersion && !ReleaseInfo.getVersion().equals(oldVersion)) { // special case nightly/svn: if same snapshot version, do not display changelog Utils.trackEvent("updated"); showChangelog(); } } else { TinyMediaManagerCMD.startCommandLineTasks(); // wait for other tmm threads (artwork download et all) while (TmmTaskManager.getInstance().poolRunning()) { Thread.sleep(2000); } LOGGER.info("bye bye"); // MainWindows.shutdown() try { // send shutdown signal TmmTaskManager.getInstance().shutdown(); // save unsaved settings Globals.settings.saveSettings(); // hard kill TmmTaskManager.getInstance().shutdownNow(); // close database connection TmmModuleManager.getInstance().shutDown(); } catch (Exception ex) { LOGGER.warn(ex.getMessage()); } System.exit(0); } } catch (IllegalStateException e) { LOGGER.error("IllegalStateException", e); if (!GraphicsEnvironment.isHeadless() && e.getMessage().contains("file is locked")) { // MessageDialog.showExceptionWindow(e); ResourceBundle bundle = ResourceBundle.getBundle("messages", new UTF8Control()); //$NON-NLS-1$ MessageDialog dialog = new MessageDialog(MainWindow.getActiveInstance(), bundle.getString("tmm.problemdetected")); //$NON-NLS-1$ dialog.setImage(IconManager.ERROR); dialog.setText(bundle.getString("tmm.nostart"));//$NON-NLS-1$ dialog.setDescription(bundle.getString("tmm.nostart.instancerunning"));//$NON-NLS-1$ dialog.setResizable(true); dialog.pack(); dialog.setLocationRelativeTo(MainWindow.getActiveInstance()); dialog.setVisible(true); } System.exit(1); } catch (Exception e) { LOGGER.error("Exception while start of tmm", e); if (!GraphicsEnvironment.isHeadless()) { MessageDialog.showExceptionWindow(e); } System.exit(1); } } /** * Update progress on splash screen. * * @param text * the text */ private void updateProgress(Graphics2D g2, String text, int progress) { Object oldAAValue = g2.getRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING); g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB); g2.setComposite(AlphaComposite.Clear); g2.fillRect(20, 200, 480, 305); g2.setPaintMode(); g2.setColor(new Color(51, 153, 255)); g2.fillRect(22, 272, 452 * progress / 100, 21); g2.setColor(Color.black); g2.drawString(text + "...", 23, 310); int l = g2.getFontMetrics().stringWidth(ReleaseInfo.getRealVersion()); // bound right g2.drawString(ReleaseInfo.getRealVersion(), 480 - l, 325); g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, oldAAValue); LOGGER.debug("Startup (" + progress + "%) " + text); } /** * Sets the look and feel. * * @throws Exception * the exception */ private void setLookAndFeel() throws Exception { // get font settings String fontFamily = Globals.settings.getFontFamily(); try { // sanity check fontFamily = Font.decode(fontFamily).getFamily(); } catch (Exception e) { fontFamily = "Dialog"; } int fontSize = Globals.settings.getFontSize(); if (fontSize < 12) { fontSize = 12; } String fontString = fontFamily + " " + fontSize; // Get the native look and feel class name // String laf = UIManager.getSystemLookAndFeelClassName(); Properties props = new Properties(); props.setProperty("controlTextFont", fontString); props.setProperty("systemTextFont", fontString); props.setProperty("userTextFont", fontString); props.setProperty("menuTextFont", fontString); // props.setProperty("windowTitleFont", "Dialog bold 20"); fontSize = Math.round((float) (fontSize * 0.833)); fontString = fontFamily + " " + fontSize; props.setProperty("subTextFont", fontString); props.setProperty("backgroundColor", "237 237 237"); props.setProperty("menuBackgroundColor", "237 237 237"); props.setProperty("controlBackgroundColor", "237 237 237"); props.setProperty("menuColorLight", "237 237 237"); props.setProperty("menuColorDark", "237 237 237"); props.setProperty("toolbarColorLight", "237 237 237"); props.setProperty("toolbarColorDark", "237 237 237"); props.setProperty("tooltipBackgroundColor", "255 255 255"); props.put("windowDecoration", "system"); props.put("logoString", ""); // Get the look and feel class name com.jtattoo.plaf.luna.LunaLookAndFeel.setTheme(props); String laf = "com.jtattoo.plaf.luna.LunaLookAndFeel"; // Install the look and feel UIManager.setLookAndFeel(laf); } /** * Does some tasks at startup */ private void doStartupTasks() { // rename downloaded files UpgradeTasks.renameDownloadedFiles(); // extract templates, if GD has not already done Utils.extractTemplates(); // check if a .desktop file exists if (Platform.isLinux()) { File desktop = new File(TmmOsUtils.DESKTOP_FILE); if (!desktop.exists()) { TmmOsUtils.createDesktopFileForLinux(desktop); } } } private void showChangelog() { // read the changelog try { final String changelog = Utils.readFileToString(Paths.get("changelog.txt")); if (StringUtils.isNotBlank(changelog)) { EventQueue.invokeLater(new Runnable() { @Override public void run() { WhatsNewDialog dialog = new WhatsNewDialog(changelog); dialog.pack(); dialog.setLocationRelativeTo(MainWindow.getActiveInstance()); dialog.setModalityType(ModalityType.APPLICATION_MODAL); dialog.setVisible(true); } }); } } catch (IOException e) { // no file found LOGGER.warn(e.getMessage()); } } }); }
From source file:Main.java
public static BufferedImage takeScreenShot(Component component, String... watermarks) { Dimension size = component.getSize(); BufferedImage screenshot = new BufferedImage(size.width, size.height, Transparency.OPAQUE); Graphics2D g = screenshot.createGraphics(); g.setClip(0, 0, size.width - 1, size.height - 1); component.update(g);/* w ww.j ava 2s . co m*/ FontMetrics fm = g.getFontMetrics(); int y = fm.getDescent(); for (String watermark : watermarks) if (watermark != null) { int x = size.width - SwingUtilities.computeStringWidth(fm, watermark); g.setColor(Color.black); g.drawString(watermark, x, y); g.setColor(Color.white); g.drawString(watermark, x - 1, y - 1); y -= fm.getHeight(); } g.dispose(); return screenshot; }
From source file:Main.java
public static int paintMultilineText(Graphics2D g2d, String text, int textX, int textWidth, int textY, int maxTextLineCount) { FontRenderContext frc = new FontRenderContext(new AffineTransform(), true, false); int fa = g2d.getFontMetrics().getAscent(); if (text.length() == 0) return textY; int currOffset = 0; AttributedString attributedDescription = new AttributedString(text); attributedDescription.addAttribute(TextAttribute.FONT, g2d.getFont()); LineBreakMeasurer lineBreakMeasurer = new LineBreakMeasurer(attributedDescription.getIterator(), frc); int lineCount = 0; while (true) { TextLayout tl = lineBreakMeasurer.nextLayout(textWidth); if (tl == null) break; int charCount = tl.getCharacterCount(); String line = text.substring(currOffset, currOffset + charCount); g2d.drawString(line, textX, textY); textY += fa;/*from www . ja v a2 s.co m*/ currOffset += charCount; lineCount++; if ((maxTextLineCount > 0) && (lineCount == maxTextLineCount)) break; } // textY += fh; return textY; }
From source file:org.ut.biolab.medsavant.client.util.ClientMiscUtils.java
/** * Draws a string centred in the given box. */// w w w . ja v a 2 s.c om public static void drawCentred(Graphics2D g2, String message, Rectangle2D box) { FontMetrics metrics = g2.getFontMetrics(); Rectangle2D stringBounds = g2.getFont().getStringBounds(message, g2.getFontRenderContext()); float x = (float) (box.getX() + (box.getWidth() - stringBounds.getWidth()) / 2.0); float y = (float) (box.getY() + (box.getHeight() + metrics.getAscent() - metrics.getDescent()) / 2.0); g2.drawString(message, x, y); }
From source file:org.mili.core.graphics.GraphicsUtil.java
/** * Prints a character image in defined font in a file. * * @param dir directory./*from w w w. j av a 2s . c o m*/ * @param fn filename. * @param font font. * @param c character to print in file. * @param mx character size x. * @param my character size y. * @throws IOException if io exception occurs. */ public static void writeChar(File dir, String fn, Font font, char c, int mx, int my) throws IOException { BufferedImage bi = new BufferedImage(mx, my, BufferedImage.TYPE_INT_RGB); Graphics2D g = (Graphics2D) bi.createGraphics(); g.setFont(font); FontMetrics fm = g.getFontMetrics(); int fh = fm.getHeight(); int cw = fm.charWidth(c); int asc = g.getFontMetrics().getAscent(); int x0 = mx / 2 - cw / 2; int y0 = my / 2 - fh / 2 + asc; g.drawString(String.valueOf(c), x0, y0); g.dispose(); File f = new File(dir, fn); GraphicsUtil.writeImage(f, bi); }