47

How to make the font size bigger in g.drawString("Hello World",10,10); ?

mKorbel
  • 109,525
  • 20
  • 134
  • 319
zbz.lvlv
  • 3,597
  • 6
  • 34
  • 38
  • 5
    Did you try `setFont()`? – trashgod Aug 15 '13 at 09:19
  • 7
    Start by taking at [java.awt.Font](http://docs.oracle.com/javase/7/docs/api/java/awt/Font.html). The method Font#deriveFont is very useful – MadProgrammer Aug 15 '13 at 09:23
  • The answer below is mostly right. Start with the question slightly reworded. How do I change the font size of a g or g2d drawstring object? – Max West Jun 20 '14 at 15:15
  • 1
    The answer below is mostly right. Start with the question slightly reworded. How do I change the font size of a g or g2d drawstring object? First create your g (or g2d) drawstring object `String string = "Hello World";` then create a Font object `Font stringFont = new Font( "SansSerif", Font.PLAIN, 18 );` Next set the Font object to the g or g2d object `g2d.setFont( stringFont );` Now apply the g2d (or g) object to your drawstring object `g2d.drawString( string, Xposition, Yposition )` where X and Y are your integers for the positioning coordinates. – Max West Jun 20 '14 at 15:26

5 Answers5

79
g.setFont(new Font("TimesRoman", Font.PLAIN, fontSize)); 

Where fontSize is a int. The API for drawString states that the x and y parameters are coordinates, and have nothing to do with the size of the text.

joaquin
  • 82,968
  • 29
  • 138
  • 152
John Snow
  • 5,214
  • 4
  • 37
  • 44
  • 8
    This works, but if you only want to set the font size and not the font name, you can use `g.getFont().getFontName()` in place of the font name parameter – shieldgenerator7 Oct 07 '14 at 15:53
  • 11
    @shieldgenerator7 I think if you only want to change the size, then MadProgrammer's suggestion is better: use `deriveFont(float size)`. – Yohanes Khosiawan 许先汉 Oct 30 '14 at 10:39
  • @YohanesKhosiawan许先汉 You're right that is much easier, however at the time I didn't see his comment because it was unreadable. Thanks for pointing that out. – shieldgenerator7 Nov 06 '14 at 13:05
  • 2
    For those seeking the the default font, `g.getFont().getFontName()` is your best bet, but on all the systems I have tested on, it's `Dialog`. – Scruffy Feb 21 '15 at 10:28
25

Because you can't count on a particular font being available, a good approach is to derive a new font from the current font. This gives you the same family, weight, etc. just larger...

Font currentFont = g.getFont();
Font newFont = currentFont.deriveFont(currentFont.getSize() * 1.4F);
g.setFont(newFont);

You can also use TextAttribute.

Map<TextAttribute, Object> attributes = new HashMap<>();

attributes.put(TextAttribute.FAMILY, currentFont.getFamily());
attributes.put(TextAttribute.WEIGHT, TextAttribute.WEIGHT_SEMIBOLD);
attributes.put(TextAttribute.SIZE, (int) (currentFont.getSize() * 1.4));
myFont = Font.getFont(attributes);

g.setFont(myFont);

The TextAttribute method often gives one even greater flexibility. For example, you can set the weight to semi-bold, as in the example above.

One last suggestion... Because the resolution of monitors can be different and continues to increase with technology, avoid adding a specific amount (such as getSize()+2 or getSize()+4) and consider multiplying instead. This way, your new font is consistently proportional to the "current" font (getSize() * 1.4), and you won't be editing your code when you get one of those nice 4K monitors.

BuZZ-dEE
  • 6,075
  • 12
  • 66
  • 96
daveca
  • 347
  • 3
  • 5
7
Font myFont = new Font ("Courier New", 1, 17);

The 17 represents the font size. Once you have that, you can put:

g.setFont (myFont);
g.drawString ("Hello World", 10, 10);
Tiffany Tran
  • 65
  • 1
  • 4
5

code example below:

g.setFont(new Font("TimesRoman", Font.PLAIN, 30));
g.drawString("Welcome to the Java Applet", 20 , 20);
Sergey Bespalov
  • 1,746
  • 1
  • 12
  • 29
Kitty
  • 51
  • 1
  • 1
3

I've an image located at here, Using below code. I am able to contgrol any things on the text that i wanted to write (Eg,signature,Transparent Water mark, Text with differnt Font and size).

 import java.awt.Font;
    import java.awt.Graphics2D;
    import java.awt.Point;
    import java.awt.font.TextAttribute;
    import java.awt.image.BufferedImage;
    import java.io.ByteArrayOutputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.net.URL;
    import java.util.HashMap;
    import java.util.Map;

    import javax.imageio.ImageIO;

    public class ImagingTest {

        public static void main(String[] args) throws IOException {
            String url = "http://images.all-free-download.com/images/graphiclarge/bay_beach_coast_coastline_landscape_nature_nobody_601234.jpg";
            String text = "I am appending This text!";
            byte[] b = mergeImageAndText(url, text, new Point(100, 100));
            FileOutputStream fos = new FileOutputStream("so2.png");
            fos.write(b);
            fos.close();
        }

        public static byte[] mergeImageAndText(String imageFilePath,
                String text, Point textPosition) throws IOException {
            BufferedImage im = ImageIO.read(new URL(imageFilePath));
            Graphics2D g2 = im.createGraphics();
            Font currentFont = g2.getFont();
            Font newFont = currentFont.deriveFont(currentFont.getSize() * 1.4F);
            g2.setFont(newFont);


            Map<TextAttribute, Object> attributes = new HashMap<>();

            attributes.put(TextAttribute.FAMILY, currentFont.getFamily());
            attributes.put(TextAttribute.WEIGHT, TextAttribute.WEIGHT_SEMIBOLD);
            attributes.put(TextAttribute.SIZE, (int) (currentFont.getSize() * 2.8));
            newFont = Font.getFont(attributes);

            g2.setFont(newFont);
            g2.drawString(text, textPosition.x, textPosition.y);
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            ImageIO.write(im, "png", baos);
            return baos.toByteArray();
        }
    }
Gautam
  • 3,707
  • 5
  • 36
  • 57