2013-12-07 53 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

我试图清理一下,我不知道这是否足够。 垃圾桶我需要更简单的东西,我想。 – user2993005

回答

1

我需要更简单的东西,我想。

我推断你想ActiveCall接收的事件标志着一个变化在JList的选择状态CallsPanelCallsPanel本身包含更新txfCallListSelectionListener。作为一个组件可以有更多的一个听众,让ActiveCall还包含一个ListSelectionListener,注册接收来自lstOpkald的事件。

如果没有适合您需要的现有事件,您可以定义您自己的PropertyChangeEvent,如here所示。

相关问题