Java如何在我的应用程序再次启动后保存背景颜色

时间:2014-04-06 10:54:24

标签: java swing colors jframe actionlistener

我正在尝试在游戏中创建一个按钮,背景颜色将从light_gray变为dark_gray。但是,当应用程序重新启动时,我必须重新选择按钮以将颜色恢复为dark_gray。

如何在重新启动应用程序时保存颜色?

我的代码非常简单,只是按钮上的动作侦听器,然后更改所选项目的bg颜色。

好的,我现在有机会允许它创建属性文件,但是人们不知道如何存储数据。我见过人们有像'property.setProperty(“最喜欢的运动”,“足球”)这样的东西;' 但是怎么能这样才能存储bg颜色呢​​?

windowDark.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent ae) 
                {
                    try {
                        Properties properties = new Properties();
                        properties.setProperty();

                        File file = new File("DarkTheme.properties");
                        FileOutputStream fileOut = new FileOutputStream(file);
                        properties.store(fileOut, "Dark theme background colour");
                        fileOut.close();
                    } catch (FileNotFoundException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            });

3 个答案:

答案 0 :(得分:5)

java.util.prefs首选项API非常适合存储桌面上运行的用户应用程序的持久首选项数据。

以下是一个示例,您可以使用它来存储和检索持久性背景颜色设置:

import java.awt.Color;
import java.util.prefs.Preferences;

public class MyPrefs {
    private static Preferences preferences = 
                     Preferences.userRoot().node("myappname.ColorPreferences");

    public static void storeBackground(Color background) {
        preferences.putInt("background", background.getRGB());
    }

    public static Color retrieveBackground() {
        // Second argument is the default when the setting has not been stored yet
        int color = preferences.getInt("background", Color.WHITE.getRGB()); 
        return new Color(color);
    }
}

要调用它,请使用以下内容:

public static void main(String[] args) {
    System.out.println("Background: " + retrieveBackground());
    storeBackground(Color.RED);
}

答案 1 :(得分:2)

您可以将颜色作为int值存储在属性文件中,如下所示:

windowDark.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent ae) {
        getProperties().setProperty("color", Integer.toString(getColor().getRGB()));
    }
});

将属性作为此按钮所在窗口的成员,或者甚至更好,在应用程序的某个常规位置(具有main()的类可能?),并使用getProperties()访问它。

当您需要使用颜色时,解析字符串:

Color color = new Color(Integer.parseInt(getProperties().getProperty("color")));

不要在每次点击按钮时保存属性文件,而是在应用程序即将退出时执行此操作:

mainWindow.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
mainWindow.addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
        try {    
            File file = new File("DarkTheme.properties");
            FileOutputStream fileOut = new FileOutputStream(file);
            getProperties().store(fileOut, "Dark theme background colour");
            fileOut.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            mainWindow.dispose();
        }
    }
});

答案 2 :(得分:0)

一旦应用程序终止,将在内存中完成更改。如果你想保留一些数据(在这种情况下,背景颜色),那么你需要存储在某个地方,例如文件,数据库等 对于简单的应用程序,将数据存储在文件中将是实用的。 为此,您需要: - 应用程序启动时,读取文件,然后应用文件中指定的颜色 - 当应用程序正在运行且用户更改颜色时,将颜色保存到同一文件中 要处理文件,您需要使用File,FileReader和FileWriter类(都在java.io包中)。