2009-05-17 51 views
1

说一个包含大量JCheckboxes,JTextfields,JLists和其他JComponents的应用程序属性页。 现在,我需要做的是跟踪用户所做的更改并保存它们。 执行此操作的正确方法是什么?跟踪摆动GUI中的更改

回答

2

您不需要实时跟踪更改(除非特殊需要)。

您可以对确定按钮做出反应,对组件进行迭代,获取它们的值,可能与旧的比较,或者只是盲目保存所有的值。
当然,如果用户取消,就放弃一切。

+0

同意,将保持简单。 – yanchenko 2009-05-18 12:40:55

0

命令类和可序列化的ArrayList或命令的LinkedList。命令将在actionPerformed方法中生成。

+0

是的,但只是输入到JTextfield将不会生成ActionEvents。 – yanchenko 2009-05-17 19:54:54

+0

虽然没有用于输入文本字段的事件处理程序?所有你需要的是一个抽象的命令类和TypingCommand,CheckboxCommand等等的子类。至少这是我会做 – 2009-05-17 20:00:23

1

两种方法可以使用:

(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)来样,如果用户备份出来,你要想想你怎么猜将要回滚任何更改。不过,这取决于你在做什么。

+0

很好的答案,谢谢。 – yanchenko 2009-05-18 12:39:49

-1

我的主要问题是,你想记录什么改变/事件。 点击,文本更改,按钮状态,...

对于每个事件,您可以将侦听器添加到摆动组件。一个singleton类可能是要添加到不同组件的侦听器的实现者。这些单例类可以添加到不同的组件中。

当组件更改或通知特殊侦听器时,单例管理器会收到通知并可处理此事件。

管理员可以记录正在进入的事件,并保存一个EventObject,其中包含您要存储的所有内容。您可以使用xstream在磁盘上存储的EventObjects列表。