保存并加载 Font/FontColour

Save and Load Font/FontColour

我正在开发的程序中有一堆自定义设置,用户可以在其中更改字体和字体颜色以及背景颜色,但现在我将从我当前的字体和字体颜色开始m 将标题保存到文本文件中:

bSave = new JButton("Save");
    bSave.setFont(new Font("Tahoma", Font.BOLD, 11));
    bSave.setInheritsPopupMenu(true);
    mnConfiguration.add(bSave);
    bSave.addActionListener(this);
    f.setVisible(true);
    // ----------------Save Config------------------------------
    bSave.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent arg0) {
            try {
                saveProperties();
                JOptionPane.showMessageDialog(f,
                        "Properties were saved successfully!");
            } catch (IOException ex) {
                JOptionPane.showMessageDialog(f,
                        "Error saving properties file: " + ex.getMessage());
            }
        }
    });
    try {
        loadProperties();
    } catch (IOException ex) {
        JOptionPane
                .showMessageDialog(f,
                        "The config.properties file does not exist, default properties loaded.");
    }
    tName.setText(configProps.getProperty("Name"));
    tFrom.setText(configProps.getProperty("Start"));
    tTo.setText(configProps.getProperty("End"));


    // -----------------------Saving-----------------------
private void saveProperties() throws IOException {

    configProps.setProperty("Name", tName.getText());
    configProps.setProperty("Start", tFrom.getText());
    configProps.setProperty("End", tTo.getText());
    OutputStream outputStream = new FileOutputStream(configFile);
    configProps.store(outputStream, "host setttings");
    outputStream.close();

}

// ------------------------Loading--------------
private void loadProperties() throws IOException {
    Properties defaultProps = new Properties();
    // sets default properties
    defaultProps.setProperty("Name", "Randomiser");
    defaultProps.setProperty("Start", "1");
    defaultProps.setProperty("End", "100");
    rGreen.setSelected(true);
    bgBlack.setSelected(true);
    tbgBlack.setSelected(true);
    bbgBlack.setSelected(true);
    tfcWhite.setSelected(true);
    btWhite.setSelected(true);
    boWhite.setSelected(true);

    configProps = new Properties(defaultProps);

    // loads properties from file
    InputStream inputStream = new FileInputStream(configFile);
    configProps.load(inputStream);
    inputStream.close();

}

这对于保存 JTextFeilds 非常有用,但是当我尝试这样做时:

configProps.setProperty("tFont", tTitle.getfont());

不喜欢。 知道如何保存字体和字体颜色吗?

Font 是复杂类型,.properties 在大多数情况下包含字符串。 您可以保存字体属性,例如大小、样式和系列:

configProps.setProperty("tFont.size", tTitle.getFont().getSize());
configProps.setProperty("tFont.name", tTitle.getFont().getFontName());
configProps.setProperty("tFont.color", tTitle.getForeground());    

Properties 管理 String 键和 String 值对。为了存储一个复杂的对象,您需要将对象的属性转换为 String 值,然后您可以在读取它们时将其转换回来,例如...

configProps.setProperty("tFont.size", Integer.toString(tTitle.getFont().getSize()));
configProps.setProperty("tFont.name", tTitle.getFont().getFontName());
configProps.setProperty("tFont.color", Integer.toString(tTitle.getForeground().getRGB()));   

您还可以使用 Preferences 来设置原始值。但是,使用此 API,您将无法控制值的存储位置,因为这取决于系统。

Preferences pref = Preferences.userNodeForPackage(this.getClass());
pref.putInt("tFont.size", tTitle.getFont().getSize());
pref.put("tFont.name", tTitle.getFont().getFontName());
pref.putInt("tFont.color", tTitle.getForeground().getRGB());   

已更新

加载值时,您需要将 String 属性 值转换回所需的类型,例如...

String sizeValue = configProps.getProperty("tFont.size", "12");
int size = Integer.parseInt(sizeValue);

String fontName = configProps.getProperty("tFont.name", UIManager.getFont("Label.font").getName());

String colorValue = configProps.getProperty("tFont.color", Integer.toString(Color.BLACK.getRGB()));
Color color = new Color(Integer.parseInt(colorValue), true);

您还应该为 keys/values 不存在做好准备,并采取预防措施或提供默认值