2009-05-17 49 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列表。