K
KevinSimonson
I'm trying to draw strings to a <JPanel>, and would like them to be
drawn in a font where each character has the same pixel width. I had
thought that "Courier" was such a font, so I wrote the following
program to verify that its characters do in fact have the same pixel
width, but when I tried running it I saw that they did not. For
example, the small "i" is very much narrower than the capital "W".
Can someone tell me a font I can use that might have a
chance of being monospaced?
I think I asked something similar to this before, and somebody told me
that different machines have different fonts, so I couldn't count on
getting an answer that was generally applicable. If that is true, how
can I find out which fonts my machine has? Any information would be
greatly appreciated.
Kevin S
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Graphics;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
public class FrameChars extends JPanel
{
private Font courier12;
private int lttrWdth;
private FrameChars ( int lw)
{
lttrWdth = lw;
Font courier12 = new Font( "Courier", Font.PLAIN, 12);
setPreferredSize( new Dimension( 800, 600));
setBackground( Color.black);
}
public void paintComponent ( Graphics page)
{
super.paintComponent( page);
page.setFont( courier12);
page.setColor( Color.blue);
page.drawRect( 60, 60, 26 * lttrWdth, 24);
for (int lttr = 1; lttr < 26; lttr++)
{ page.drawLine( 60 + lttr * lttrWdth, 60, 60 + lttr * lttrWdth,
84);
}
page.drawLine( 60, 72, 60 + 26 * lttrWdth, 72);
page.setColor( Color.green);
page.drawString( "abcdefghijklmnopqrstuvwxyz", 62, 70);
page.drawString( "ABCDEFGHIJKLMNOPQRSTUVWXYZ", 62, 82);
}
public static void main ( String[] arguments)
{
if (arguments.length == 1)
{ FrameChars fc = new
FrameChars( Integer.parseInt( arguments[ 0]));
JFrame fcFrame = new JFrame( "FrameChars " + arguments[ 0]);
fcFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE);
fcFrame.getContentPane().add( fc);
fcFrame.pack();
fcFrame.setVisible( true);
}
else
{ System.out.println( "Usage is\n java FrameChars <lttr-wdth>");
}
}
}
drawn in a font where each character has the same pixel width. I had
thought that "Courier" was such a font, so I wrote the following
program to verify that its characters do in fact have the same pixel
width, but when I tried running it I saw that they did not. For
example, the small "i" is very much narrower than the capital "W".
Can someone tell me a font I can use that might have a
chance of being monospaced?
I think I asked something similar to this before, and somebody told me
that different machines have different fonts, so I couldn't count on
getting an answer that was generally applicable. If that is true, how
can I find out which fonts my machine has? Any information would be
greatly appreciated.
Kevin S
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Graphics;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
public class FrameChars extends JPanel
{
private Font courier12;
private int lttrWdth;
private FrameChars ( int lw)
{
lttrWdth = lw;
Font courier12 = new Font( "Courier", Font.PLAIN, 12);
setPreferredSize( new Dimension( 800, 600));
setBackground( Color.black);
}
public void paintComponent ( Graphics page)
{
super.paintComponent( page);
page.setFont( courier12);
page.setColor( Color.blue);
page.drawRect( 60, 60, 26 * lttrWdth, 24);
for (int lttr = 1; lttr < 26; lttr++)
{ page.drawLine( 60 + lttr * lttrWdth, 60, 60 + lttr * lttrWdth,
84);
}
page.drawLine( 60, 72, 60 + 26 * lttrWdth, 72);
page.setColor( Color.green);
page.drawString( "abcdefghijklmnopqrstuvwxyz", 62, 70);
page.drawString( "ABCDEFGHIJKLMNOPQRSTUVWXYZ", 62, 82);
}
public static void main ( String[] arguments)
{
if (arguments.length == 1)
{ FrameChars fc = new
FrameChars( Integer.parseInt( arguments[ 0]));
JFrame fcFrame = new JFrame( "FrameChars " + arguments[ 0]);
fcFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE);
fcFrame.getContentPane().add( fc);
fcFrame.pack();
fcFrame.setVisible( true);
}
else
{ System.out.println( "Usage is\n java FrameChars <lttr-wdth>");
}
}
}