我正在尝试将JLabel的颜色,文本和大小(网格高度/网格宽度)保存在文件中。因此,只要程序运行,我都可以查看过去的JLabel。
我知道如何将字符串读/写到文件中,但是可以保存JLabel的状态吗?
答案 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...
}