2014-12-15 5 views
3

enter image description here상상력을 어떻게 디자인 할 수 있습니까?

enter image description here

어떻게/코드이 프로그램의 흐름을 디자인 할 수 있습니다?

  1. CardLayout을 사용해 보았지만 만족스럽지 않습니다.
  2. 여러 개의 시도해보십시오 JPanel, 사용자가 버튼을 클릭하면 관련 JPanelsetVisible()이 변경됩니다. 그러나 이것은 작동하지 않거나 사용하는데 성공할 수 없습니다.
  3. 여러개의 JFframe (왼쪽 부분은 항상 같다)을 사용할 계획이며, 사용자 선택에 따라 창을 닫고여십시오. 이것은 어리석은 것처럼 보입니다 ...

그래서 해결책을 찾도록 도와 줄 수 있습니까?

+5

'JTabbedPane'을 대신 사용해보세요. – Arvind

+1

Cardlayout이 올바른 해결책 인 것 같습니다. 왜 너를 만족시키지 않는거야? –

+0

JTabbedPane의 탭 항목이 작아 보이지만 (버튼처럼 보이지 않습니다.) 확대 할 수 없습니다. Cardlayout 어떤 도움이되지만 이번에는 "RecordsFrame"을 "ShowingStudentsDetails"에 전달할 수 없습니다. (감사합니다. 모든 사람들이 내 게시물을 편집했습니다.) –

답변

1

다음은 내가 작성한 것입니다.

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()를 호출하여 버튼을 눌렀을 때 표시되도록합니다.

답변에 대한 힌트로 사용했습니다. 답을 찾은 것으로 생각되면 받아 들여주세요.

관련 문제