gpt4 book ai didi

java - 如何在 JPanel 中绘制字符串

转载 作者:行者123 更新时间:2023-12-01 12:10:47 24 4
gpt4 key购买 nike

我有这段代码,它显示系统所有可用的字体,但字体很多,所以我需要添加一个垂直滚动条。我搜索并发现我可以制作一个 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);
}
}

最佳答案

  • 不要使用paint,使用paintComponent
  • 在进行任何自定义绘制之前调用您正在使用的 super paint 方法;
  • 利用当前FontFontMetrics来确定大小;
  • 使用 JLabels 代替

看看Working with Text APIs , Measuring TextHow to Use Labels了解更多详情

为了使用 JScrollPane,面板需要能够计算其首选大小并通过 getPreferredSize 方法返回该大小。这需要在绘制组件之前完成。

使用JLabel,简单多了

关于java - 如何在 JPanel 中绘制字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27301796/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com