2013-12-07 3 views
1

안녕하세요, 저는 하나의 JPanel에서 다른 JPanel로 값을 전달하려고합니다. 내가 그것을 전달할 생성자가 없기 때문에 나는 그것을 이해할 수 없다. "CallsPanel"클래스의 JTextField에서 컨텍스트를 가져와 내 "ActiveCall"에 전달하려고합니다.하나의 JPanel에서 다른 JPanel로 값을 전달하려고합니다.

public class ActiveCall extends JPanel { 

    private MainFrame frame; 
    private JLabel lblNumber; 
    private JButton btnHangUp; 


    private Controller controller = new Controller(); 

    public ActiveCall(MainFrame frame) { 

     this.frame = frame; 
     this.setSize(300, 380); 
     this.setLocation(10, 10); 

     lblNumber = new JLabel(); 
     this.add(lblNumber); 
     lblNumber.setLocation(10, 10); 
     this.lblNumber.setSize(270, 40); 

     btnHangUp = new JButton("Læg på"); 
     this.add(btnHangUp); 
     btnHangUp.setLocation(10, 270); 
     this.btnHangUp.setSize(270, 40); 
     btnHangUp.addActionListener(controller); 
    } 

    private class Controller implements ActionListener 
     { 
      public void actionPerformed(ActionEvent e) 
      { 
       JButton source = (JButton) e.getSource(); 

       if (source == btnHangUp) { 
        frame.showPanel("Calls"); //TODO: SKAL AFSLUTTE OPKALD, GEMME DET I - OG REDIRECT TIL LOGGEN! 

       } 

      } 

     } 
} 



public class CallsPanel extends JPanel { 


    private MainFrame frame; 
    private JTextField txfCall; 
    private JButton btnSearch, btnCall, btnCallLast, btnDelete; 
    private JList lstOpkald; 
    private JScrollPane scpOpkald; 

    private Controller controller = new Controller(); 

    public CallsPanel(MainFrame frame) { 

     this.frame = frame; 
     this.setSize(300, 380); 
     this.setLocation(10, 10); 

     txfCall = new JTextField(); 
     this.add(txfCall); 
     txfCall.setLocation(10, 10); 
     txfCall.setSize(210, 40); 
     txfCall.setText("Indtast Telefonnummer..."); 
     txfCall.addActionListener(controller); 

     btnCall = new JButton("Ring Op"); 
     this.add(btnCall); 
     btnCall.setLocation(10, 60); 
     btnCall.setSize(270, 40); 
     btnCall.addActionListener(controller); 

     lstOpkald.addListSelectionListener(new ListSelectionListener() { 
      @Override 
      public void valueChanged(ListSelectionEvent arg0) { 
       // TODO Sætter valgte nummer op i JTextField 
       if(!lstOpkald.isSelectionEmpty()) 
        txfCall.setText(Integer.toString(Service.getOpkaldList().get(lstOpkald.getSelectedIndex()).getTelefonnummer())); 
      } 
     }); 
    } 

    private class Controller implements ActionListener 
    { 
      public void actionPerformed(ActionEvent e) 
      { 
       JButton source = (JButton) e.getSource(); 

       if (source == btnSearch) {  //SKAL ÅBNE EN NY TOM FRAME, HVOR MAN KAN SØGE OG VÆLGE EN KONTAKT HVOR TELEFONNUMMERET BLIVER AUTOMATISK PASTET IND I TLFNUMMER TEKSTFELTET! 

       } 

       if (source == btnCall) {  //TODO: SKAL SIMULERE ET OPKALD! 
        frame.showPanel("ActiveCall"); 
       } 

       if (source == btnCallLast) { //TODO: SKAL SIMULERE ET OPKALD FRA DET SIDSTE OPKALDTE NUMMER! 
        frame.showPanel("ActiveCall"); 
       } 

       if (source.equals(btnDelete)) { // SLETTER MARKERET OPKALD FRA ARRAYLIST! 
        Opkald2 opkald = (Opkald2) lstOpkald.getSelectedValue(); 

        if (opkald != null) 
        { 
         Service.deleteOpkald(opkald); 
        } 
        updateOpkaldList();   
       } 
      } 


      private void updateOpkaldList() 
      { 
       //Listen over opkald opdateres 
       lstOpkald.setListData(Service.getOpkaldList().toArray()); 
      } 
     }   

    public String getNumber() 
    { 
     String number = txfCall.getText(); 
     return number; 
    } 
} 
+1

팁 : 사람들이 실제 문제에 집중할 수 있도록 불필요한 입력란을 정리하십시오. 전체 수업을 덤핑하는 것은 좋은 일이 아닙니다. – givanse

+0

나는 그것을 조금 닦으려고 노력했다, 나는 그것이 충분한 지 모른다. trashgod 나는 생각보다 간단한 뭔가가 필요합니다. – user2993005

답변

1

은 내가 생각, 뭔가 더 간단합니다.

난 당신이 ActiveCallCallsPanelJList의 선택 상태 변경 이벤트에게 의미를 수신 할 것으로 추정. CallsPanel 자체에 이 포함되어 있습니다. 업데이트는 txfCall입니다. 구성 요소에는 하나 이상의 청취자가있을 수 있으므로 ActiveCall에는 lstOpkald의 이벤트를 수신하도록 등록 된 ListSelectionListener이 포함되어 있습니다.

필요에 따라 기존 이벤트가없는 경우 here과 같이 자신을 PropertyChangeEvent으로 정의 할 수 있습니다.

관련 문제