保存并加载 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 不存在做好准备,并采取预防措施或提供默认值
我正在开发的程序中有一堆自定义设置,用户可以在其中更改字体和字体颜色以及背景颜色,但现在我将从我当前的字体和字体颜色开始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 不存在做好准备,并采取预防措施或提供默认值