如何在JPanel中绘制String

时间:2014-12-04 18:56:44

标签: java jpanel

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

1 个答案:

答案 0 :(得分:1)

  • 请勿使用paint,请使用paintComponent;
  • 在进行任何自定义绘画之前,请调用您正在使用的超级paint方法;
  • 利用FontMetrics获取当前Font来确定尺寸;
  • 使用JLabe ls代替

查看Working with Text APIsMeasuring TextHow to Use Labels了解详情

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

使用JLabel s,它更简单