說一個包含大量JCheckboxes,JTextfields,JLists和其他JComponents的應用程序屬性頁。 現在,我需要做的是跟蹤用戶所做的更改並保存它們。 執行此操作的正確方法是什麼?跟蹤擺動GUI中的更改
回答
您不需要實時跟蹤更改(除非特殊需要)。
您可以對確定按鈕做出反應,對組件進行迭代,獲取它們的值,可能與舊的比較,或者只是盲目保存所有的值。
當然,如果用戶取消,就放棄一切。
命令類和可序列化的ArrayList或命令的LinkedList。命令將在actionPerformed方法中生成。
是的,但只是輸入到JTextfield將不會生成ActionEvents。 – yanchenko 2009-05-17 19:54:54
雖然沒有用於輸入文本字段的事件處理程序?所有你需要的是一個抽象的命令類和TypingCommand,CheckboxCommand等等的子類。至少這是我會做 – 2009-05-17 20:00:23
兩種方法可以使用:
(1)當用戶點擊您的屬性頁就OK了,拉的當前值出你JComponents和更新設置或諸如此類的東西。這是最簡單的方法,因爲您不需要ActionListeners,並且如果用戶退出,則不必回滾更改(儘管您的問題並不完全清楚此對話框/頁面執行的操作)。 (2)對於實現ActionListener的swing對象,監聽ActionEvent並相應地處理更改。對於JTextField的情況下,使用的DocumentListener如下面的示例代碼:
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
public class Test implements DocumentListener
{
private JTextField jtf;
public static void main(String[] args)
{
javax.swing.SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
Test test = new Test();
}
});
}
public Test()
{
JFrame jf = new JFrame();
JPanel jp = new JPanel();
jtf = new JTextField();
jtf.getDocument().addDocumentListener(this);
jp.setLayout(new BorderLayout());
jp.add(jtf, BorderLayout.CENTER);
jf.add(jp);
jf.setSize(200, 100);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
}
public void changedUpdate(DocumentEvent e)
{
// Do stuff here
}
public void insertUpdate(DocumentEvent e)
{
// Do stuff here
}
public void removeUpdate(DocumentEvent e)
{
// Do stuff here
}
}
正如你可能從(1),挑戰由式(2)來樣,如果用戶備份出來,你要想想你怎麼猜將要回滾任何更改。不過,這取決於你在做什麼。
很好的答案,謝謝。 – yanchenko 2009-05-18 12:39:49
Observer Pattern應該對此有所幫助。基本上它允許組件(發佈者)通知其他組件(訂戶)的東西,基本上它是一個ActionListener(如Catchwa's Answer)。
Java Example of Observer Pattern從谷歌
如果你可以檢查出的Head First Design Patterns第2章或Action Listener Tutorial
我希望幫助一點點,我不能掀起一個例子的時刻,但希望這將幫助你開始。
- 1. 跟蹤更改
- 2. 跟蹤更改
- 3. Gridview中的跟蹤更改
- 4. Xdebug跟蹤GUI?
- 5. LINQ跟蹤更改
- 6. 跟蹤列上的更改
- 7. 更改屬性的跟蹤更改
- 8. actionscript 3跟蹤動態文本更改
- 9. 跟蹤更改對象更改
- 10. 使用rails跟蹤更改 - 「更改?」
- 11. EntityFramework CTP5更改跟蹤
- 12. 禁用DataTable更改跟蹤
- 13. Microsoft圖形更改跟蹤
- 14. Nhibernate沒有跟蹤更改
- 15. 更改跟蹤結構
- 16. SQL Server:表更改跟蹤
- 17. NHibernate屬性更改跟蹤
- 18. 使用$ watch跟蹤更改
- 19. SQL 2008 FTS跟蹤更改
- 20. SQL Server 2008更改跟蹤
- 21. 跟蹤同步更改
- 22. 用條件更改XML中的跟蹤
- 23. 更改可可中的字體跟蹤
- 24. 在JavaScript中跟蹤對window.location的更改
- 25. SQL Server 2005中的更改跟蹤
- 26. 跟蹤Microsoft Sync Framework中的更改
- 27. 在winform中跟蹤更改C#
- 28. 在html中跟蹤和顯示更改
- 29. 在Visual Studio中跟蹤更改
- 30. 在子模塊中跟蹤更改
同意,將保持簡單。 – yanchenko 2009-05-18 12:40:55