如何在文件中保存JLabel的颜色/大小?

时间:2019-01-22 16:56:48

标签: java swing jlabel gridbaglayout

我正在尝试将JLabel的颜色,文本和大小(网格高度/网格宽度)保存在文件中。因此,只要程序运行,我都可以查看过去的JLabel。

我知道如何将字符串读/写到文件中,但是可以保存JLabel的状态吗?

3 个答案:

答案 0 :(得分:0)

您必须定义要保存的内容以及方式

要保存的内容

您需要定义对您而言重要的内容,例如,颜色可以是带有或不带有透明度信息的颜色。

文本可以是简单的字符串,也可以是包含诸如字符类型,大小,修饰符(粗体,下划线...)之类信息的对象。

如何保存

您需要为每种信息定义一种格式(例如,颜色可以使用其名称"red"或其十六进制值"#FF0000"保存,或者可以作为对自定义变量{{1}的引用) }。 您还需要定义文件格式(xml,json,自定义二进制文件,属性文件,yaml ...)。

我建议您尝试使用最简单的解决方案。使用GSon或Faster Jackson之类的库将所有数据保存并保存为JSon非常简单。

这是json中的一种可能格式:

"mainColorTemplate1"

答案 1 :(得分:0)

一种实现方法是,利用对象Serialization.所有Swing组件都实现Serializable interface.。您可以保存该组件,下次运行该应用程序时,该组件将保持原样。关于此的两个有趣的问题是:Why is Java Swing serializable?Swing components and serialization

答案 2 :(得分:0)

JLabel是序列化的对象,您可以使用 ObjectOutputStream 将整个 JLabel 对象保存在文件中,并从 ObjectInputStream 中读取它。这样。

根据DataObject CLASS更新了之前的代码:

public static void main(String[] args) {

    // Creating a JLabel
    JLabel label = new JLabel("REHAN JAVED");
    label.setForeground(Color.RED);
    label.setSize(new Dimension(500, 500));

    // adding it into the file.
    addItIntoFile(new DataObject(label, 200, 50, 0, 1));

    // reading file..
    DataObject dataObj = readDataObject();
    JLabel newLabel = dataObj.getLabel();
    int x = dataObj.getXPosition();
    // and take all the data from getters.

    System.out.println(newLabel.getText()+"\n"+newLabel.getForeground()+"\n"+label.getSize());

}


public static void addItIntoFile(DataObject dataObj) {

    File file = new File("data.txt");

    try {

        file.createNewFile();
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));
        oos.writeObject(dataObj);
        oos.close();

        // You can handle the different exceptions according to you. 
    } catch (Exception e) {
        e.printStackTrace();
    }

}

public static DataObject readDataObject() {

    DataObject dataObj = null;

    try {

        ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("data.txt")));
        dataObj = (DataObject) ois.readObject();
        ois.close();

        // You can handle the different exceptions according to you. 
    } catch (Exception e) {
        e.printStackTrace();
    }

    // Handling null data..
    if(dataObj == null) {
        dataObj = new DataObject(new JLabel(), 0, 0, 0, 0);
    }

    return dataObj;

}

它可以正常工作。 :)

更新版本:

要包括诸如宽度,高度,x和y位置之类的网格约束,请创建一个新类并实现 Serializable 接口并将其直接存储到文件中。

public class DataObject implements Serializable {

    private JLabel label;
    private int gridWidth;
    private int gridHeight;
    private int gridXPosition;
    private int gridYPosition;

    // Your Constructor..
    public DataObject(JLabel label, int gridWidth, int gridHeight,
            int gridXPosition, int gridYPosition) {
        this.label = label;
        this.gridWidth = gridWidth;
        this.gridHeight = gridHeight;
        this.gridXPosition = gridXPosition;
        this.gridYPosition = gridYPosition;
    }

    // your getter and setters... 

}