保存并加载Font / FontColour

时间:2015-03-15 20:43:33

标签: java swing fonts save load

我在程序中有一堆自定义设置我正在处理用户可以更改字体和字体颜色以及背景颜色的位置,但现在我用字体和字体颜色开始#&# 39;将标题保存到文本文件中:

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();

}

这对于保存JTextFeild很有用,但是当我尝试这样做时:

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

它并不喜欢它。 任何想法如何保存字体和字体颜色?

2 个答案:

答案 0 :(得分:1)

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);

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

答案 1 :(得分:0)

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

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