我有这个代码,显示系统的所有可用字体,但字体很多,所以我需要添加一个垂直滚动条。 我搜索并发现我可以创建一个JScrollPane并将其添加到框架但仅适用于JPanel。 那么我怎样才能将每种字体的字符串绘制到面板上。 对不起,我不相干,但我是Java的新手。
public class FontList extends JPanel {
static String[] families ;
int[] styles = { Font.PLAIN, Font.ITALIC, Font.BOLD,
Font.ITALIC + Font.BOLD };
String[] stylenames = { "Plain", "Italic", "Bold", "Bold Italic" };
public static void setFamilies(String[] names){
families = names;
}
@Override
public void paint(Graphics g) {
for (int f = 0; f < families.length; f++) { // for each family
for (int s = 0; s < styles.length; s++) { // for each style
Font font = new Font(families[f],styles[s],18); // create font
g.setFont(font); // set font
String name = families[f] + " " + stylenames[s]; // create name
g.drawString(name, 20, (f * 4 + s + 1) * 20); // display name
}
}
}
public static void main(String[] args)
{
String[] fontNames = GraphicsEnvironment.getLocalGraphicsEnvironment()
.getAvailableFontFamilyNames();
JFrame f = new JFrame();
f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
setFamilies(fontNames);
f.add(new FontList());
f.setSize(300,300);
f.setLocationRelativeTo(null);
f.setVisible(true);
}
}
答案 0 :(得分:1)
paint
,请使用paintComponent
; paint
方法; FontMetrics
获取当前Font
来确定尺寸; JLabe
ls代替查看Working with Text APIs,Measuring Text和How to Use Labels了解详情
为了使用JScrollPane
,面板需要能够计算其首选大小并通过getPreferredSize
方法返回。这需要在绘制组件之前完成。
使用JLabel
s,它更简单