2016-04-27 6 views
1

私はクラスを2つのクラスに分割するのは難しいですが、今はGUIとロジックが1つのクラスにまとめられています。私は私の例のために分割する方法を理解していない、このプログラムの私の唯一の "論理"はボタンが何を決定する3つの内部クラスです(レコードの削除、レコードの保存など...)JavaのGUIからロジックを分離する

Heres私のコードは、誰かが正しい方向に私を指すことができますか?

private String name; 
    private String surname; 
    private String phone; 
    private String address; 
    private String postcode; 
    private String email; 
    static String summary; 
    private JPanel panel; 
    private JPanel buttonspanel; 
    private JPanel labelspanel; 
    private JPanel tablepanel; 
    private JFrame frame; 
    private JLabel lblName; 
    private JLabel lblEmail; 
    private JLabel lblPostcode; 
    private JLabel lblAddress; 
    private JLabel lblSurname; 
    private JLabel lblPhone; 
    private JTextField txtName; 
    private JTextField txtSurname; 
    private JTextField txtPostcode; 
    private JTextField txtEmail; 
    private JTextField txtPhone; 
    private JTextField txtAddress; 
    private JButton btnSave; 
    private JButton btnUpload; 
    private JButton btnDelete; 


    String columns[] = {"Name","Surname","Phone","Address","Postcode","Email"}; 



    private DefaultTableModel model = new DefaultTableModel(); 
    JTable table = new JTable(model);  



    public AddressBook() { 
     createForm(); 
     createLabels(); 
     createTextField(); 
     createButton(); 
     createTable(); 
     frame.add(panel); 
     frame.setVisible(true); 

    } 
    public void createLabels(){ 
     lblName = new JLabel ("Name"); 
     lblName.setBounds(10, 30, 100, 20); 
     labelspanel.add (lblName); 

     lblSurname = new JLabel ("Surname"); 
     lblSurname.setBounds(10, 50, 100, 20); 
     labelspanel.add (lblSurname); 

     lblAddress = new JLabel ("Address"); 
     lblAddress.setBounds(10, 70, 100, 20); 
     labelspanel.add (lblAddress); 

     lblPhone = new JLabel ("Phone"); 
     lblPhone.setBounds(10, 90, 100, 20); 
     labelspanel.add (lblPhone); 

     lblPostcode = new JLabel ("Postcode"); 
     lblPostcode.setBounds(10, 110, 100, 20); 
     labelspanel.add (lblPostcode); 

     lblEmail = new JLabel ("Email"); 
     lblEmail.setBounds(10, 130, 100, 20); 
     labelspanel.add (lblEmail); 

    } 

    public void createTextField(){ 

     txtName = new JTextField (null); 
     txtName.setBounds(110, 30, 150, 20); 
     labelspanel.add (txtName); 

     txtSurname = new JTextField (null); 
     txtSurname.setBounds(110, 50, 150, 20); 
     labelspanel.add (txtSurname); 

     txtAddress = new JTextField (null); 
     txtAddress.setBounds(110, 70, 150, 20); 
     labelspanel.add (txtAddress); 

     txtPhone = new JTextField (null); 
     txtPhone.setBounds(110, 90, 150, 20); 
     labelspanel.add (txtPhone); 

     txtPostcode = new JTextField (null); 
     txtPostcode.setBounds(110, 110, 150, 20); 
     labelspanel.add (txtPostcode); 

     txtEmail = new JTextField (null); 
     txtEmail.setBounds(110, 130, 150, 20); 
     labelspanel.add (txtEmail); 

    } 

    public void createForm(){ 

     frame = new JFrame(); 
     frame.setTitle("Address Book"); 
     frame.setSize(800,800); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     panel = new JPanel(); 
     buttonspanel = new JPanel(); 
     buttonspanel.setLayout(new FlowLayout()); 
     buttonspanel.setBorder (BorderFactory.createEtchedBorder()); 
     labelspanel = new JPanel(); 
     labelspanel.setBorder (BorderFactory.createEtchedBorder()); 
     labelspanel.setLayout(null); 
     labelspanel.setPreferredSize(new Dimension (400,200)); 
     tablepanel = new JPanel(); 
     tablepanel.setLayout(new BorderLayout()); 
     panel.add(buttonspanel); 
     panel.add(labelspanel); 
     panel.add(tablepanel); 

    } 

    public void createButton(){ 
     btnSave = new JButton ("Save to a file"); 
     btnSave.addActionListener(new SaveHandler()); 
     buttonspanel.add (btnSave); 


     btnDelete = new JButton ("Delete from the table"); 
     btnDelete.addActionListener(new DeleteHandler()); 
     buttonspanel.add (btnDelete); 

     btnUpload = new JButton ("Add details to table"); 
     btnUpload.addActionListener(new AddHandler()); 
     buttonspanel.add (btnUpload); 



    } 

    public void createTable(){ 
     model.setColumnIdentifiers(columns); 
     JScrollPane scrollPane = new JScrollPane(table); 
     tablepanel.add(scrollPane, BorderLayout.SOUTH); 
    } 

    class SaveHandler implements ActionListener { 

     public void actionPerformed(ActionEvent e) { 
      if(e.getSource()==btnSave) 
      { 
       name = (""); 
       surname = (""); 
       phone = (""); 
       address = (""); 
       postcode = (""); 
       email = (""); 

       name = txtName.getText(); 
       surname = txtSurname.getText(); 
       phone = txtPhone.getText(); 
       address = txtAddress.getText(); 
       postcode = txtPostcode.getText(); 
       email = txtEmail.getText(); 

       summary = ("Name:" +name)+("Surname:" +surname)+("Phone:" + phone)+("Address:" + address)+("Postcode:" + postcode)+("Email:" + email); 
       String saveFile = summary; 

       try { 
        BufferedWriter reader = new BufferedWriter(new FileWriter(new File("userinfo.txt"), true)); 
        reader.write(saveFile); 
        reader.newLine(); 
        reader.close(); 
        JOptionPane.showMessageDialog(frame, "The details were sucessfuly saved"); 

       } catch (IOException e1) { 
        JOptionPane.showMessageDialog(frame, "Something went wrong, please try again"); 
       } 
      } 
     } 

    } 


    class AddHandler implements ActionListener { 

     public void actionPerformed(ActionEvent e) { 
      if(e.getSource()==btnUpload) 
      { 

       String nameRow = txtName.getText(); 
       String surnameRow = txtSurname.getText(); 
       String phoneRow = txtPhone.getText(); 
       String addressRow = txtAddress.getText(); 
       String postcodeRow = txtPostcode.getText(); 
       String emailRow = txtEmail.getText(); 
       Object[] row = {nameRow,surnameRow,phoneRow,addressRow,postcodeRow,emailRow}; 
       model.addRow(row); 

      } 

     } 
    } 

    class DeleteHandler implements ActionListener { 

     public void actionPerformed(ActionEvent e) { 
      if(e.getSource()==btnDelete) 
      { 
       int i = table.getSelectedRow(); 
       if(i >= 0){ 
        model.removeRow(i); 
       } 
      } 
     } 
    } 



    public static void main(String[] args) { 

     new AddressBook(); 

    } 
+0

「私はそれを分離したい」 - なぜ分離したいのですか?あなたがなぜ分離を望んでいるのか理解していれば、おそらく簡単に分割することができます。 –

答えて

0
class GUI{  


    Jbutton btnsave; 
    Jbutton Delete; 
    jbutton update 

    HandleAll btnHandler = new HandleAll(); 

    btnSave.addActionListener(btnHandler); 
    Deletea.ddActionListener(btnHandler); 
    update.addActionListener(btnHandler); 


     class HandleAll implements ActionListener { 

     public void actionPerformed(ActionEvent e) { 
     if(e.getSource()==btnSave){ 
     //on click save button 
     }else if(e.getSource()==Delete){ 
     //on click delete button 
     }else if(e.getSource()==update){ 
     //on click update button 
     } 

     } 
    } 


} 

あなたは、GUIから別々のロジックへのアプローチの上に従うことができます。ところで、私はHandleAllクラスをinner classにしました。 HandleAllは、actionListnerインターフェイスを実装しています。すべてのボタンを押してこのクラスのactionperformedが呼び出されますが、e.getsourceを選択することによって、どのボタンが押されたかを確認できます。

+0

申し訳ありませんが、私は理にかなっていませんが、2つの別々の.JAVAファイルが必要です.1つはGUIを処理し、もう1つはロジックを処理するためです。私の問題は、同じクラスに存在しないボタンのリスナーを持つ方法を知らないことです。 – breadkun

+0

これは同じ概念です。他のクラスのボタンを参照する必要があります。これを行うことができます。 – Priyamal

関連する問題