동물 유형마다 특수한 입력 구성 요소가있는 패널을 만들고 세 패널을 모두 CardLayout
을 사용하는 별도의 JPanel에 배치합니다. CardLayout는 주어진 시간에 자식 하나만 표시합니다. 각 하위 항목은 사용자가 선택하는 문자열 ID로 식별되며 하위 항목을 추가 할 때 지정해야합니다.
CardLayout은 컨테이너의 기본 크기가 모든 하위 요소를 수용 할 수있을만큼 커야 항상 표시되도록하기 때문에 구성 요소를 동적으로 추가하는 것보다 낫습니다. 그러면 표시되는 구성 요소를 변경할 때 대화 상자가 주변을 뒤섞 지 않게됩니다.
private static final String COW_CARD_ID = "cow";
private static final String DOG_CARD_ID = "dog";
private static final String CAT_CARD_ID = "cat";
void buildConfirmDialog() {
JPanel cowFieldsPanel = new JPanel();
// Add cow-specific components here
JPanel dogFieldsPanel = new JPanel();
// Add dog-specific components here
JPanel catFieldsPanel = new JPanel();
// Add cat-specific components here
final CardLayout cardLayout = new CardLayout();
final JPanel animalSpecificFieldsPanel = new JPanel(cardLayout);
animalSpecificFieldsPanel.add(cowFieldsPanel, COW_CARD_ID);
animalSpecificFieldsPanel.add(dogFieldsPanel, DOG_CARD_ID);
animalSpecificFieldsPanel.add(catFieldsPanel, CAT_CARD_ID);
JRadioButton cowButton = // ...
JRadioButton dogButton = // ...
JRadioButton catButton = // ...
cowButton.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent event) {
if (event.getStateChange() == ItemEvent.SELECTED) {
cardLayout.show(animalSpecificFieldsPanel, COW_CARD_ID);
}
}
});
dogButton.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent event) {
if (event.getStateChange() == ItemEvent.SELECTED) {
cardLayout.show(animalSpecificFieldsPanel, DOG_CARD_ID);
}
}
});
catButton.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent event) {
if (event.getStateChange() == ItemEvent.SELECTED) {
cardLayout.show(animalSpecificFieldsPanel, CAT_CARD_ID);
}
}
});
ButtonGroup buttonGroup = new ButtonGroup();
buttonGroup.add(cowButton);
buttonGroup.add(dogButton);
buttonGroup.add(catButton);
}
그것은 예상 할 때 사용자가 많은 항목의 목록에서 정확히 하나의 항목을 선택할 수 있음을 언급 아마 가치, 당신은 라디오 버튼,하지 확인란을 사용합니다. Swing에서 JRadioButtons는 거의 항상 하나의 공통 ButtonGroup에 추가되어 하나의 많은 기능을 갖습니다.
출처
2013-11-28 22:22:26
VGR
* "내가 프로그램을 가지고 있다면 [...]"* downvote에 충분한 이유! –
나는 프로그램을 가지고있다. 나는이 문제가 내 코드와 관련이 거의 없다고 생각했다. 내 문제가 구문보다는 사고 방식으로 진화하는 것을 볼 수 있기 때문이다. –
일부 수신기를 추가하려고 했습니까? –