다음은 내가 작성한 것입니다.
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import javax.swing.border.BevelBorder;
public class Imagination extends JFrame {
private JPanel [] contentPanes ;
private JPanel buttonsPanel, stuffPanel ;
private GridLayout layout ;
private JButton [] consecutiveButtons ;
Imagination() {
layout = new GridLayout(0, 2, 0, 1);
setLayout(new GridLayout(1, 2));
contentPanes = new JPanel[3];
for (int i = 0 ; i < contentPanes.length ; i++) {
contentPanes[i] = new JPanel(layout);
contentPanes[i].setBorder(new BevelBorder(BevelBorder.RAISED));
}
addToAllPanes();
buttonsPanel = new JPanel(new GridLayout(0, 1, 0, 5));
consecutiveButtons = new JButton[3];
for (int i = 0 ; i < consecutiveButtons.length ; i++) {
consecutiveButtons[i] = new JButton("Sample Button "+i);
buttonsPanel.add(consecutiveButtons[i]);
//We will set the name of the button so that
//we can change the panels
consecutiveButtons[i].setName(i+"");
consecutiveButtons[i].addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
consecutiveButtonActionPerformed(e);
}
});
}
stuffPanel = new JPanel(new GridLayout(0, 2, 0, 5));
stuffPanel.add(contentPanes[0]);
setSize(450, 300);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
add(buttonsPanel);
add(stuffPanel);
pack();
}
public static void main(String [] args) {
Imagination i = new Imagination();
i.setVisible(true);
}
private void addToAllPanes() {
for (int i = 0 ; i <= 10 ; i ++) {
contentPanes[0].add(new JLabel("A Sample Label"));
contentPanes[0].add(new JTextField("A Sample Text Field"));
contentPanes[1].add(new JLabel("Demo Label"));
contentPanes[1].add(new JTextField("A Sample Text Field"));
contentPanes[2].add(new JLabel("Stack"));
contentPanes[2].add(new JTextField("Overflow"));
}
}
private void consecutiveButtonActionPerformed(ActionEvent e) {
JButton b = (JButton) e.getSource();
int id = Integer.parseInt(b.getName());
stuffPanel.removeAll();
stuffPanel.add(contentPanes[id]);
stuffPanel.repaint();
}
}
나는 세 개의 단추와 세 개의 패널을 사용하여 배열을 만들어 주 JFrame의 두 개의 다른 패널로를 추가했다. 모든 버튼이 하나의 패널에 추가되고 JTextFields 및 JTextLabels가 포함 된 패널이 다른 패널에 추가됩니다. 버튼을 클릭했을 때 표시되는 패널을 제어하려면 버튼 이름을 설정하고 공통 조치 수신기를 추가하십시오. 나는 모든 구성 요소를 제거하고 필요한 패널을 추가했습니다. 그런 다음 repaint()를 호출하여 버튼을 눌렀을 때 표시되도록합니다.
답변에 대한 힌트로 사용했습니다. 답을 찾은 것으로 생각되면 받아 들여주세요.
'JTabbedPane'을 대신 사용해보세요. – Arvind
Cardlayout이 올바른 해결책 인 것 같습니다. 왜 너를 만족시키지 않는거야? –
JTabbedPane의 탭 항목이 작아 보이지만 (버튼처럼 보이지 않습니다.) 확대 할 수 없습니다. Cardlayout 어떤 도움이되지만 이번에는 "RecordsFrame"을 "ShowingStudentsDetails"에 전달할 수 없습니다. (감사합니다. 모든 사람들이 내 게시물을 편집했습니다.) –