JCheckboxes, JTextfields, JLists 및 기타 JComponents가 많은 응용 프로그램 속성 페이지라고합니다. 이제 사용자가 변경 한 내용을 추적하여 저장해야합니다. 이것을 구현하는 올바른 방법은 무엇입니까?스윙 GUI의 변경 내용 추적
답변
변경 사항을 실시간으로 추적 할 필요가 없습니다 (특별한 필요가없는 경우).
구성 요소를 반복하면서 값을 가져 오거나 이전 값과 비교하거나 모든 값을 맹목적으로 저장하면 OK 단추를 사용하여 반응 할 수 있습니다.
물론 사용자가 취소하면 모든 것을 포기합니다. 당신이 사용할 수있는
명령 클래스와 명령의 Serializable ArrayList 또는 LinkedList입니다. 명령은 actionPerformed 메소드에서 생성됩니다.
JTextfield에 입력하는 것만으로 ActionEvent가 생성되지 않습니다. – yanchenko
텍스트 필드에 입력하기위한 이벤트 처리기가 없습니까? 필요한 것은 TypingCommand, CheckboxCommand 등과 같은 추상 명령 클래스와 하위 클래스입니다. 적어도 내가 할 수있는 것은 –
두 가지 접근 방법 :
(1) 사용자가 JComponent의에서 현재 값을 끌어와 설정이나 이것 저것을 업데이트, 사용자의 속성 페이지에서 확인을 클릭합니다. 이것은 ActionListeners가 필요하지 않기 때문에 가장 쉬운 방법이며, 사용자가 백 아웃하면 변경 사항을 롤백 할 필요가 없습니다 (질문에서이 대화/페이지가하는 일이 무엇인지 명확하게 알 수는 없습니다).
(2) ActionListener를 구현하는 스윙 개체의 경우 ActionEvent를 수신 대기하고 이에 따라 변경 내용을 처리하십시오. JTextFields은 아래의 샘플 코드로의 DocumentListener를 사용
(2) 사용자가 밖으로 백업하는 경우에 대해 와서 당신이 방법에 대해 생각해야에서 당신은 (1), 도전에서 추측 할 수 있듯이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
}
}
변경 사항을 롤백 할 것입니다. 그것은 정말로 당신이하고있는 것에 달려 있습니다.
대단한 답변, 감사합니다. – yanchenko
Observer Pattern이 도움이됩니다. 기본적으로 구성 요소 (게시자)가 다른 구성 요소 (구독자)에게 사실을 알릴 수 있도록 기본적으로 ActionListener (예 : Catchwa's Answer)입니다. 구글
에서
Java Example of Observer Pattern에게 당신은 내가 그 조금 도움이되기를 바랍니다 Head First Design Patterns의 2 장 또는 Action Listener Tutorial
을 확인할 수있는 경우, 그 뜻을 희망 순간에 예를 채찍질 할 수는 없지만 시작하는 데 도움이됩니다.
내가 가지고있는 주된 질문은 어떤 변경/이벤트를 기록하고 싶은지입니다. 클릭, 텍스트 변경, 버튼 상태, ...
모든 이벤트에 대해 스윙 구성 요소에 리스너를 추가 할 수 있습니다. 하나의 singleton 클래스는 다른 구성 요소에 추가하려는 리스너의 구현 자일 수 있습니다. 이 싱글 톤 클래스를 다른 컴포넌트에 추가 할 수 있습니다.
구성 요소가 특수 수신기를 변경하거나 알리면 singleton 관리자에게 알리고이 이벤트를 처리 할 수 있습니다.
관리자는 들어오는 이벤트를 기록 할 수 있으며 저장할 이벤트가 모두 포함 된 EventObject도 저장할 수 있습니다. xstream을 사용하여 디스크에 저장할 수있는 EventObject 목록입니다.
이 경우 싱글 톤을 사용하지 않을 것입니다 ... 필요하지 않고 유연성을 제한합니다. – keuleJ
- 1. Gridview의 변경 내용 추적
- 2. 데이터베이스 구조의 변경 내용 추적
- 3. winform에서 변경 내용 추적 C#
- 4. EntityFramework CTP5 변경 내용 추적
- 5. 하위 모듈의 변경 내용 추적
- 6. CoreData 엔터티의 변경 내용 추적
- 7. 변경 내용 추적 : svn + latex
- 8. ADO.NET Framework 변경 내용 추적
- 9. 변경 내용 추적 (SQL 서버)
- 10. 스윙 GUI의 최적 배치 방법
- 11. SQL Server 2008 변경 내용 추적
- 12. PHP 개체 속성 변경 내용 추적
- 13. Entity Framework의 필드 변경 내용 추적
- 14. Asp.net 엔터티의 변경 내용 추적 이벤트
- 15. 추적 및 html 변경 내용 표시
- 16. Sharepoint 목록 항목의 변경 내용 추적
- 17. Django 모델 인스턴스 변경 내용 추적
- 18. 개별 필드에 대한 변경 내용 추적 - Silverlight
- 19. 디렉터리 내용 추적
- 20. NSFetchedResultsController 관계 변경 추적
- 21. ORM을 사용하는 동안 db 필드의 변경 내용 추적
- 22. LINQ-to-SQL을 사용하여 데이터베이스의 외부 변경 내용 추적
- 23. SQL Server 2008 : 변경 내용 추적 테이블은 어디에 저장됩니까?
- 24. ETL : 구체화 된 로그를 사용하여 데이터 변경 내용 추적
- 25. 변경 내용 추적, 테이블 앵커가 작동하지 않는 문제, 아이디어를 정리했습니다.
- 26. SQL Server 2008 동기화 프레임 워크 변경 내용 추적
- 27. Visual Studio에서 GUI의 변경 사항을 알려주는 스크립트
- 28. 변경 추적 구조
- 29. NHibernate 속성 변경 추적
- 30. 변경 사항 추적 - 장고
동의하며 간단하게 유지할 것입니다. – yanchenko