Как я могу сохранить цвет / размер JLabel в файле? - PullRequest
0 голосов
/ 22 января 2019

Я пытаюсь сохранить цвет, текст и размер (высоту сетки / ширину сетки) JLabel в файле. Поэтому, когда программа запускается, я могу просмотреть прошлое JLabels.

Я знаю, как читать / записывать строки в файл, но возможно ли сохранить состояние JLabel?

Ответы [ 3 ]

0 голосов
/ 22 января 2019

Один из способов сделать это - использовать объект Сериализация. Все компоненты Swing реализуют Сериализуемый интерфейс. Вы можете сохранить компонент, и при следующем запуске приложения он будет будь как ты это оставил. Вот два интересных вопроса: Почему Java Swing сериализуем? Компоненты Swing и и сериализация .

0 голосов
/ 22 января 2019

JLabel - это сериализованный объект, вы можете сохранить весь объект JLabel в файле, используя ObjectOutputStream , и прочитать его из ObjectInputStream . Вот так.

ОБНОВЛЕНИЕ ПРЕДЫДУЩЕГО КОДА ПО ДАННОМУ ОБЪЕКТУ КЛАССА:

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... 

}
0 голосов
/ 22 января 2019

Вы должны определить что нужно сохранить, а как .

Что сохранить

Вам необходимо определить, что важно для вас, например, цвет может быть с информацией о прозрачности или без нее.

Текст может быть простой строкой или объектом, содержащим такую ​​информацию, как тип символа, размер, оформление (жирный, подчеркивание ...).

Как сохранить

Вам нужно определить формат для каждой информации (например, цвет можно сохранить с его именем "red" или его шестнадцатеричным значением "#FF0000" или может быть ссылкой на пользовательскую переменную "mainColorTemplate1"). Вам также необходимо определить формат файла (xml, json, пользовательский двоичный файл, файл свойств, yaml ...).

Предлагаю попробовать самое простое решение для ваших знаний. Очень просто хранить все данные в объекте и сохранять их как JSon, используя такие библиотеки, как GSon или Faster Jackson.

Вот возможный формат в json:

{
  "labels": [
    {
      "text":"My first label",
      "x":2,
      "y":1,
      "color":"#FF0000"
    },
    {
      "text":"My Second label",
      "x":4,
      "y":3,
      "color":"#FFFF00"
    }
  ]
} 
...