문제가 해결되었습니다. 내 문제는 상자를 초기화 할 때 DefaultComboBoxModel (rootboxitems)을 사용하여 초기화하면 항목 상태가 변경된다고 가정합니다. 그렇지 않습니다. 모든 후속 상자는 초기 채우기 이후 및 각 선택 변경 후에 업데이트되어야합니다. 이것은 각 상자의 갱신 코드를 별도의 기능에 두어 재사용 할 수 있다면 쉽게 수행 할 수 있습니다.
내가 고안 한 예는 Make, Model 및 Color의 세 가지 속성 (예 : "Ford", "Mustang", "Blue")을 기반으로하는 자동차 선택입니다. 각 Make는 여러 개의 모델을 가질 수 있으며 각 모델에는 고유 한 색상 목록이 있습니다.
대화 & 초기화는 다음과 같습니다
는
public CascadeGui(java.awt.Frame parent, boolean modal, Makes aMakes) {
super(parent, modal);
ArrayList<Make> makes;
Make selectedMake;
Model slectedModel;
initComponents();
makes = aMakes.GetMakesArrayList();
cboMakes.setModel(new javax.swing.DefaultComboBoxModel(makes.toArray(new Make[makes.size()])));
selectedMake = (Make) cboMakes.getSelectedItem();
cboModels.setModel(new javax.swing.DefaultComboBoxModel(selectedMake.GetModelsArray()));
slectedModel = (Model) cboModels.getSelectedItem();
cboColors.setModel(new javax.swing.DefaultComboBoxModel(slectedModel.GetColorsArray()));
}
이 모든 속성의 초기 선택을 설정합니다. 차종 항목 상태 변경 이벤트 핸들러는 다음과 같습니다 당신이 볼 수 있듯이, 메이크업의 새로운 섹션이 모델 상자의 업데이트하고 색 상자가 발생합니다
private void cboMakesItemStateChanged(java.awt.event.ItemEvent evt) {
if (evt.getStateChange() == SELECTED) {
UpdateModelsCbo();
UpdateColorsCbo();
}
}
. 모델 선택 이벤트의 해당 코드는 다음과 같습니다
private void cboModelsItemStateChanged(java.awt.event.ItemEvent evt) {
if (evt.getStateChange() == SELECTED) {
UpdateColorsCbo();
}
}
은 내가 넷빈즈는 예를 들어 파일을 압축 및/또는 질문에 대한 답변을 공유하게 기쁠 것이다. 동시에, 초보자 자바 프로그래머 중 한 명이되어, 개선을위한 의견 및 제안을 부탁드립니다.
ed
어떻게하면됩니까? 내가 아는 유일한 방법은 프로그래밍 방식으로 선택 영역을 변경하는 것입니다. 단 하나의 항목 만있는 경우 변경할 부분이 없습니다. 내가 뭘 놓치고 있니? –
죄송합니다. 귀하의 어려움을 이해할 수 없습니다. 어쨌든, 여러 가지 선택 사항이있는 경우에도이 문제를 처리해야합니다. 사용자가 기본값을 선택하면 어떻게 될까요? – Raffaele
2 개 이상있는 경우 프로그래밍 방식으로 2를 선택하고 첫 번째를 선택할 수 있습니다. 단 하나의 아이템이 있다면 ... –