说一个包含大量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