我有一個用Swing製作的簡單的Java GUI窗體。它有一些文本輸入和複選框,我希望它記住輸入到這些的最後一個值。當然,可以手動將它們保存到某個文件中,然後讀取文件並填充輸入,但是我不知道是否有辦法自動執行此操作。由於如何記住Swing GUI窗體中的最後一個值?
6
A
回答
2
根據應用程序的大小和數據量,序列化整個UI可能是一種選擇。
這可能是一個壞主意,但是,當信息基本上被檢索並存儲在數據庫中了。在這種情況下,應該使用值對象和綁定,但對於UI與另一種持久化方式無關的一些簡單應用程序,您可以使用它。
當然,你不能修改序列化值,直接這樣,就認爲這是一個額外的選項:
alt text http://img684.imageshack.us/img684/4581/capturadepantalla201001p.png
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class SwingTest {
public static void main(String [] args) {
final JFrame frame = getFrame();
frame.pack();
frame.setVisible(true);
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
writeToFile(frame, "swingtest.ser");
}
});
}
/**
* Reads it serialized or create a new one if it doens't exists
*/
private static JFrame getFrame(){
File file = new File("swingtest.ser");
if(!file.exists()) {
System.out.println("creating a new one");
JFrame frame = new JFrame();
JPanel panel = new JPanel();
panel.add(new JLabel("Some test here:"));
panel.add(new JTextField(10));
frame.add(panel);
return frame;
} else {
return (JFrame) readObjectFrom(file);
}
}
這裏的讀/寫爲素描,有很多這裏有待改進的餘地。
/**
* write the object to a file
*/
private static void writeToFile(Serializable s , String fileName) {
ObjectOutputStream oos = null;
try {
oos = new ObjectOutputStream(new FileOutputStream(new File(fileName)));
oos.writeObject(s);
} catch(IOException ioe){
} finally {
if(oos != null) try {
oos.close();
} catch(IOException ioe){}
}
}
/**
* Read an object from the file
*/
private static Object readObjectFrom(File f) {
ObjectInputStream ois = null;
try {
ois = new ObjectInputStream(new FileInputStream(f)) ;
return ois.readObject();
} catch(ClassNotFoundException cnfe){
return null;
} catch(IOException ioe) {
return null;
} finally {
if(ois != null) try {
ois.close();
} catch(IOException ioe){}
}
}
}
0
不是真的。您必須注意將值保存到文件或數據庫中。
5
優選使用Preferences API。
它存儲在系統中的喜好,但這個細節被隱藏你 - 你專注於你的喜好的結構和值,而不是實現細節(這是特定於平臺)。
此API還允許在同一臺機器上的不同用戶的不同設置。
+0
要試一試 – Fluffy 2010-01-11 16:43:54
相關問題
- 1. rich:popupPanel窗體記住舊值
- 2. 記住窗體標記輸入值
- 3. 窗體選擇不記住的值
- 4. autoincrement列記住它在SQLite表中的最後一個值
- 5. 如何動態記住與php的最後一個鏈接
- 6. 如何記住Jquery的最後狀態?
- 7. 如何讓Winforms ToolStripSplitButton記住最後一個按鈕被點擊?
- 8. Web應用程序 - 如何記住最後一個查詢?
- 9. C#在窗口窗體中有一個窗口的多個GUI
- 10. 如何這個GUI中的Java Swing
- 11. WPF。抓住最後一個窗口點擊任何地方
- 12. 如何最好地定位Swing GUI?
- 13. 記住UITabViewController中一個選項卡中的最後一個視圖
- 14. 記住最後一個標籤後重定向
- 15. JAVA Swing Gui窗口掛起
- 16. Java - Swing GUI窗口順序
- 17. 如何使用JavaFX控制器加載Swing GUI窗體(JavaFX中的按鈕)
- 18. Swing - 多個GUI
- 19. 如何從另一個窗體打開窗體中的窗體
- 20. 記住傳遞給調用的JavaScript函數的最後一個值單擊
- 21. 試圖使對話框窗口記住它的最後位置
- 22. 記住註冊過程的最後一個狀態
- 23. 計數器需要堅持記住的最後一個數字
- 24. 記住窗體上的值破壞並重新創建
- 25. 使窗體記住CodeIgniter早期提交的值
- 26. 如何讓Windows記住使用tkinter filedialog的最後一個目錄?
- 27. 如何使列表框不記住它的最後一個視圖
- 28. Python中的函數在返回後如何記住它的值?
- 29. 窗體滾動到最後一行而不是下一個
- 30. 值集/ p在循環中。在下一步它記住從最後一步
只是不使用Java序列化! – 2010-01-11 16:34:06
@Tom:爲什麼不準確? – OscarRyz 2010-01-11 16:48:59