이 문제에 대한 해결책을 설계하는 데 어려움을 겪습니다. 경험이없는 부산물입니다.디자인 : 2 jcomboboxes, 상자 2 목록 상자 1의 선택에 따라 달라집니다. XML의 데이터
목표는 XML 입력 파일을 읽고 XML에서 정보를 저장하고 두 개의 콤보 상자에 XML 데이터를 채우는 것입니다. 두 번째 콤보 상자의 내용은 첫 번째 콤보 상자의 선택에 따라 변경됩니다.
이 XML 구조를 감안할 때 :<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Category xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Node>
<ID>Unique string</ID>
<Name>Unique string</Name>
<Code>Generic string<Code>
<Kind>Generic string</Kind>
<Frame>Generic string</Frame>
...
</Node>
...
</Category>
첫 번째 콤보 상자 : 은 종류 섹션에서 발견에만 고유 한 값을 포함해야합니다.
두 번째 콤보 상자 : 첫 번째 콤보 상자에서 Kind가 선택된 Kind와 동일한 모든 노드의 모든 Name 항목이 들어 있습니다.
XML 소스 관련 : 외부에서 유지 관리되고 생성됩니다. ID 섹션의 값은 항상 고유합니다. 이름 섹션의 값은 항상 고유합니다. 스키마가 변경되지 않습니다. 앞으로 새로운 고유 값이 종류 섹션에 나타날 수 있습니다.
제안 된 솔루션 : XML 원본에서 노드를 나타내는 XMLNode 클래스를 만듭니다. XMLNode 클래스의 멤버는 각 노드의 태그에 해당합니다. 모든 노드를 반복하고 각 노드마다 XMLNode를 만듭니다. 노드를 반복하면서 : 키 = XMLNode.ID 및 vals = XMLNode를 사용하여 XMLNode 객체를 해시 맵에 추가합니다. 고유 한 종류의 배열을 만듭니다.
종류 항목의 배열에서 콤보 상자 하나를 채 웁니다. 각각의 이름 데이터에서 콤보 상자 2를 채 웁니다.
이 방법이 적절한 방법입니까, 아니면 더 나은/더 쉽고/더 우아한 해결책을 간과 했습니까? 올바른 길을 가고 있다면 제안 된 솔루션에 명백한 결함이 있습니까? Runnable#Thread
또는 SwingWorker
ll updates to the JComboBox and its ComboBoxModel must be done on EDT
리디렉션 모든 FileIO
또는 Database
이벤트에 대한 저장 품목에 대한
두 번째 상자를 만들기위한 논리를 이해하는 데 도움 않습니다 아래 mKorbel의 제안 첫 번째 선택에 따라 달라 지므로 매우 유용합니다. 그러나 XML 데이터를 가져 와서 내 프로그램 내에서 표현하는 더 좋은 방법은 없습니다. 그 stackoverflow 하이브 마음에서 일부 의견은 인정 될 것입니다 ... – NickAbbey