Java Swing에서 GUI를 구현하려고합니다. (저는 Swing을 처음 접했습니다). 두 패널이 들어있는 부모 패널이 있습니다. 왼쪽 패널과 오른쪽 패널. 왼쪽 패널에는 JComboBox 드롭 다운 메뉴가 있습니다. 오른쪽 패널은 7 개의 카드가있는 CardLayout입니다. 왼쪽 패널에있는 JComboBox의 선택에 따라 오른쪽 패널에 표시된 카드를 변경하고 싶습니다. 3 개의 패널은 모두 별도의 클래스입니다 : LeftPanel.java, RightPanel.java 및 ParentPanel.java. 이 작업을 수행 할 리스너를 배치 할 장소를 찾는 데 어려움을 겪고 있습니다. LeftPanel은 RightPanel의 CardLayout을 볼 수 없으며 ParentPanel은 Child RightPanel의 CardLayout에 액세스 할 수 없습니다. 다른 JPanel의 CardLayout에 액세스하는 방법에 대한 게시물을 보았습니다. 디자인에 결함이 있습니까? 아니면 이것을 달성 할 수 있습니까?한 자식의 동작을 다른 자식의 입력에서 어떻게 트리거 할 것입니까? JPanel (Java Swing)?
수정 지금까지 조언 해 주셔서 감사합니다. 아래는 MCVE입니다. 각 클래스는 자체 (.java) 파일에 있습니다. 프레임 클래스의 모든 것을 퍼팅하는 대신 유지 보수를 쉽게하기 위해서였습니다. 나는 이전에 한 클래스에 모든 것을 가지고 있었지만 잘 작동했지만 2000 + 코드 줄과 20 개 이상의 패널을 가진 하나의 긴 파일이되었습니다.
// Main 메서드 포함하는 클래스 메인 프레임 :
패키지를 tempgui; 공용 클래스 ParentPanel가 JPanel을 확장 {
private JPanel ParentPanel;
private LeftPanel LP;
private RightPanel RP;
public ParentPanel(){
ParentPanel = new JPanel();
LP = new LeftPanel();
RP = new RightPanel();
ParentPanel.setLayout(new GridLayout(1,2));
ParentPanel.add(LP);
ParentPanel.add(RP);
add(ParentPanel);
}
}
// 클래스 LeftPanel : 공공 공용 클래스 메인 프레임 JFrame의 {
JFrame Frame1;
public static void main(String[] args){
new MainFrame();
}
public MainFrame(){
Frame1 = new JFrame();
Frame1.setDefaultCloseOperation(EXIT_ON_CLOSE);
Frame1.getContentPane().add(new ParentPanel(), BorderLayout.CENTER);
Frame1.setSize(800, 600);
Frame1.setLocationRelativeTo(null);
Frame1.pack();
Frame1.setVisible(true);
}
}
// 클래스 ParentPanel를 확장 LeftPanel은 JPanel을 확장합니다 {
private JPanel LeftPanel;
private JComboBox J1;
public LeftPanel(){
LeftPanel = new JPanel();
String[] Arr = {"RP1","RP2"};
J1 = new JComboBox(Arr);
LeftPanel.add(J1);
add(LeftPanel);
}
}
클래스 RightPanel가 //: 공용 클래스 RightPanel가 JPanel을 확장 {
private JPanel RightPanel;
private RP1Panel RP1;
private RP2Panel RP2;
private CardLayout C1;
public RightPanel(){
RightPanel = new JPanel();
RP1 = new RP1Panel();
RP2 = new RP2Panel();
C1 = new CardLayout();
RightPanel.setLayout(C1);
RightPanel.add(RP1, "RP1");
RightPanel.add(RP2, "RP2");
C1.show(RightPanel, "RP1");
add(RightPanel);
}
가}
// 클래스 RP1Panel가 : 공용 클래스 RP1Panel가 {
private JPanel RP1;
private JLabel JRP1;
public RP1Panel(){
RP1 = new JPanel();
JRP1 = new JLabel("RP1 Panel");
RP1.add(JRP1);
add(RP1);
}
JPanel의 확장
}
// 클래스 RP2Panel는 : 공용 클래스 RP2Panel는
' "아니면 가능한 이것을 달성하는 것입니다? "- 네, 가장 확실합니다. ''디자인에 결함이 있습니까? '- 적절한 코드가 없으면, 유효한 mcve가 있어야합니다. 문제가 어디에 있는지 말할 수는 없습니다. 다시 한 번, 작은 형식의 프로그램 인 MCVE를 작성하여 게시하여 코드 형식의 텍스트로 질문에 게시 할 수있을만큼 작고 컴파일하고 실행하며 문제를 설명해보십시오. 그것은 당신의 전체 프로그램이 아니며, 모든 기능을 가지고 있지는 않지만, 다시 우리를 위해 실행되며, 우리에게 문제를 보여줍니다. –
* "모든 3 개의 패널은 별도의 클래스입니다."*이 수수께끼에 대한 1 단계는 "구성 요소 클래스를 불필요하게 확장하지 말 것"입니다. 여기서 패널을 확장하는 경우를 설명 할 수 있습니까? –