Java 如何在JPanel中拉绳

Java 如何在JPanel中拉绳,java,jpanel,Java,Jpanel,我有这个代码,它显示了系统的所有可用字体,但字体很多,所以我需要添加一个垂直滚动条。 我搜索并发现我可以制作一个JScrollPane并将其添加到框架中,但只能用于JPanel。 那么,如何将每个字体的字符串绘制到面板上呢。 很抱歉,我与您无关,但我是Java新手 public class FontList extends JPanel { static String[] families ; int[] styles = { Font.PLAIN, Font.ITALIC, Font

我有这个代码,它显示了系统的所有可用字体,但字体很多,所以我需要添加一个垂直滚动条。 我搜索并发现我可以制作一个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);
   }
}
public类FontList扩展了JPanel{
静态字符串[]族;
int[]样式={Font.PLAIN、Font.ITALIC、Font.BOLD、,
Font.ITALIC+Font.BOLD};
String[]StyleName={“普通”、“斜体”、“粗体”、“粗体斜体”};
公共静态void集合族(字符串[]名称){
家庭=姓名;
}
@凌驾
公共空间涂料(图g){
对于(int f=0;f
  • 不要使用
    油漆
    ,使用
    油漆组件
  • 在进行任何自定义绘制之前,调用正在使用的super
    paint
    方法
  • 对当前的
    Font
    使用
    FontMetrics
    确定大小
  • 改用
    JLabe
    ls
请查看,并获取更多详细信息

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

使用
JLabel
s,它更简单