java - 错误 : cannot find symbol when using . setFont()

标签 java swing try-catch truetype cannot-find-symbol

我一直在尝试在我的 Swing 应用程序中使用自定义字体(包含在包中)。我看过很多关于这个主题的代码片段和教程,但我似乎无法让它工作。 将十三个错误缩小到一个后,我可能已将代码修改为无法完全实现我想要的功能。不幸的是,我刚刚开始学习Java,我无法弄清楚。下面是我的代码,之后是我的错误。任何帮助将不胜感激,非常感谢!

import javax.swing.*;
import java.awt.Toolkit;
import java.awt.Font;
import java.awt.GraphicsEnvironment;
import java.io.FileInputStream;
import java.io.IOException;
import java.awt.FontFormatException;

public class welcomeWindow extends JFrame {
  public static void main(String[] args) {
    new welcomeWindow();
  }
  public welcomeWindow() {
    // opens window to specifications
    Toolkit toolkit=Toolkit.getDefaultToolkit();
    this.setSize(toolkit.getScreenSize().width, toolkit.getScreenSize().height);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setTitle("window title");
    this.setVisible(true);
    this.setLocationRelativeTo(null);

    // creates panel, adds panel to frame
    JPanel welcomePanel = new JPanel();
    this.add(welcomePanel);

    // font (where i THINK the problem may be)
    try {
        Font childTitle = Font.createFont(Font.TRUETYPE_FONT, new FileInputStream("comic_andy.ttf")).deriveFont(30f);
        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
        ge.registerFont(Font.createFont(Font.TRUETYPE_FONT, new FileInputStream("comic_andy.ttf")));
    } catch (IOException | FontFormatException e) {
        e.printStackTrace();
        Font childTitle = new Font("Helvetica", Font.BOLD, 30);
        System.err.println("caught error");
    }

    // creates title label and adds to panel
    JLabel welcomeTitle = new JLabel("title");
    welcomeTitle.setFont(childTitle);
    welcomePanel.add(welcomeTitle);

  }
}

如前所述,这是我遇到的错误(实际上非​​常简单):

welcomeWindow.java:40: error: cannot find symbol
    welcomeTitle.setFont(childTitle);
                         ^
  symbol:   variable childTitle
  location: class welcomeWindow
1 error

我一直认为我没有正确创建字体,但我认为我错了,因为我无法解决问题。如果有人能指出我的代码出错的方向,那就太棒了。谢谢!

最佳答案

变量myFont 被声明为try..catch block 的本地变量。将其移到 block 之外。

Font myFont;
try {
    myFont = Font.createFont(Font.TRUETYPE_FONT, new FileInputStream("comic_andy.ttf")).deriveFont(30f);
    GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
    ge.registerFont(Font.createFont(Font.TRUETYPE_FONT, new FileInputStream("comic_andy.ttf")));
} catch (IOException | FontFormatException e) {
    e.printStackTrace();
    myFont = new Font("Helvetica", Font.BOLD, 30);
    System.err.println("caught error");
}

关于java - 错误 : cannot find symbol when using . setFont(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51483218/

相关文章:

java - 使用 Jaxb 生成 xml 的无限 try-catch block ?

php - 如何捕获PHP错误作为软验证

php - 可以在用户定义的 php 函数中编写 try 和 catch 语句

java多态创建对象

Java 导入包/.JAR

c# - winforms 面板与 java swing 面板

java - 状态栏,如何使我的线条、椭圆和矩形可见?

java - 使用 Gson 从 JSON 数组中排除空对象

java - 使用 Java 和 Tinkerpop 中的 Neo4j 算法

java - 按下esc键时如何停止关闭JDialog