JComboBox
에 파일 정보 (XML)가 채워져 있고 두 번째 ComboBox
에 첫 번째 항목의 선택한 항목에 기반한 정보가 입력되기를 원합니다.연관 배열을 사용하지 않고 JComboBox를 동적으로 채우기
<components>
<house id="Kitchen">
<espresso_machine>C</espresso_machine>
<coffee_machine>C</coffee_machine>
<coffee_pot>C</coffee_pot>
<kettle>C</kettle>
<toaster>C</toaster>
<microwave>C</microwave>
<oven>C</oven>
<frying_pan>C</frying_pan>
<stand_mixer>C</stand_mixer>
<extrator_fan>C</extrator_fan>
<tv>C</tv>
<compact_flurescent>C</compact_flurescent>
<flurescent_tube>C</flurescent_tube>
<dishwasher>C</dishwasher>
<freezer>C</freezer>
<blender>C</blender>
<can_opener>C</can_opener>
<cooking_range>C</cooking_range>
<popcorn_popper>C</popcorn_popper>
</house>
<house id="Laundry">
<washing_machine>C</washing_machine>
<clothes_dryer>C</clothes_dryer>
<vacuum_handler>C</vacuum_handler>
<compact_fluorescent>C</compact_fluorescent>
<iron>C</iron>
</house>
<house id="Room">
<compact_fluorescent>C</compact_fluorescent>
<ac_room>C</ac_room>
<tv>C</tv>
<cell_phone_charger>C</cell_phone_charger>
<clock_radio>C</clock_radio>
</house>
</components>
나의 첫 번째 콤보 상자가 속성 "ID"컨텐츠 (주방, 세탁, 룸)가 있습니다
내 영어는 내가 당신에게 예를 보여 드리겠습니다 때문에 약간 녹슨이 내 XML 파일입니다. JDialog를 처음 열면 첫 번째 콤보 상자에서 "주방"옵션이 선택되고 두 번째 콤보 상자에는 모든 하위 요소가 정규화 된 이름 (에스코 기계, 커피 머신, 커피 포트, 커피 포트, 주전자 등)이 있습니다.
첫 번째 항목에서 선택한 항목을 변경할 때 두 번째 콤보 상자의 내용이 변경되어야합니다.
houseSpaceCombo = new JComboBox(configs.XMLreaderDOM4J.readHouseTypeID());
equipmentsCombo = new JComboBox(configs.XMLreaderDOM4J.readHouseEquipmentsID(houseSpaceCombo.getSelectedItem().toString()));
다른 두 가지 방법 :
public static String[] readHouseTypeID()
{
Element root = getDoc().getRootElement();
ArrayList<String> attributeAL = new ArrayList<>();
for (Iterator i = root.elementIterator("house"); i.hasNext();)
{
Element foo = (Element) i.next();
attributeAL.add(foo.attributeValue("id").toString());
}
String[] vec = convertArrayListToArray(attributeAL);
return vec;
}
public static String[] readHouseEquipmentsID(String selectedItem)
{
Element root = getDoc().getRootElement();
Element innerElement;
ArrayList<String> attributeAL = new ArrayList<>();
for (Iterator i = root.elementIterator("house"); i.hasNext();) {
Element element = (Element) i.next();
if(element.attributeValue("id").equals(selectedItem)) {
for (Iterator j = element.elementIterator(); j.hasNext();) {
innerElement = (Element) j.next();
String tmp = innerElement.getQualifiedName().replace("_", " ");
attributeAL.add(tmp);
}
}
}
String[] vec = convertArrayListToArray(attributeAL);
return vec;
}
내가 무엇을 할 수
여기 내 코드의 샘플입니까?
는 내가 따를 수있는 코드 예제가 있나요, 입니까? – SaintLike
감사합니다. 그다지 좋지는 않을 것입니다. 아주 좋은 아이디어입니다. 내 XML 파일이 너무 크고, 위에 게시 한 것은 샘플에 불과합니다. 어쨌든 고마워요. – SaintLike
메모리를 사용하고 속도를 원하는 문제에 무게를 두어야 할 것입니다. 다른 선택은 기본 콤보 상자가 변경 될 때마다 XML 섹션을 읽는 것입니다. 메인 태그를 얻기 위해 이미 한 번에 파일을 읽었으므로 시간이 오래 걸립니다. 다시 읽어야하는 시간을 절약하기 위해 하위 요소를 캐시에 저장하고 싶을 것입니다 ... – MadProgrammer