2017-11-22 12 views
0

したがって、ArrayListを表示するJTableでguiを作成しようとしています。このArrayListは、実際のGUIで動的に塗りつぶされるはずです。gui JTableに動的なArrayListを埋め込むにはどうすればよいですか?

具体的に言えば、私は人と銀行口座をそれらの人々に追加できるようにするプログラムを作成しようとしています。私はどの人がどのアカウントを所有しているかをJTableに表示したい。

コード内にいくつかの問題があることはわかっています。これは、これまで解決してきたさまざまなことを試みているため、これまでに頭痛を与えていただけです。

すべてのヘルプは大歓迎です!本当に本当に本当に感謝します。

これまでの私のコード:

コントローラクラス

package org.lu.ics.inlämningsuppgifter; 

import javax.swing.JFrame; 

public class Controller { 
PersonRegister persons; 
JFrame frame; 

public Controller (PersonRegister personReg, JFrame frame) { 
    this.persons=personReg; 
    this.frame=frame; 
} 

public void addPerson (String pNbr, String pName) { 
    Person tmpPerson = new Person(pNbr, pName); 
    persons.addPerson(tmpPerson); 
} 

public void addPersonAccount (String pNbr, String pName, String accNbr) { 
    Person tmpPerson = new Person(pNbr, pName); 
    Account account = new Account(accNbr); 
    tmpPerson.setAccounts(account); 

} 
public String[] findPerson(String pNbrFind) { 
    Person p; 
    String[] aPerson = null; 
    p = persons.findPerson(pNbrFind); 
    if (p != null && p.getAccounts() != null) { 
    aPerson = new String[4]; 
    aPerson[0] = p.getPNbr(); 
    aPerson[1] = p.getName(); 
    aPerson[2] = p.getAccounts(); 
    } else if (p != null) { 
    aPerson = new String[2]; 
    aPerson[0] = p.getPNbr(); 
    aPerson[1] = p.getName(); 
    } 
    return aPerson; 
    } 


} 

Accountクラス

package org.lu.ics.inlämningsuppgifter; 

public class Account { 

private String nbr; 
private double balance; 
private Person owner; 

public Person getOwner() { 
    return owner; 
} 

public void setOwner(Person newOwner) { 
    owner = newOwner; 
} 

public void setNbr(String newNbr) { 
    nbr = newNbr; 
} 

public String getNbr() { 
    return nbr; 
} 

public Account (String accNbr) { 
    balance = 0.00; 
    this.setNbr(accNbr); 

} 

public void setBalance(double newBalance) { 
    balance = newBalance; 
    this.setBalance(newBalance); 

} 

public double getBalance() { 
    return balance; 
} 

public void credit(double amount) { 
    balance = balance + amount; 
} 

public void withdraw(double amount) { 
    balance = balance - amount; 
} 


} 

人クラス パッケージorg.lu.ics.inlämningsuppgifter。

import java.util.*; 

public class Person { 

private String pNbr; 
private String name; 
private ArrayList<Account> accounts = new ArrayList<Account>(); 

public Person(String pNbr, String pName) { 
    this.setPNbr(pNbr); 
    this.setName(pName); 
} 

public ArrayList<Account> getAccount() { 
    return accounts; 
} 

public void setPNbr(String newPNbr) { 
    pNbr = newPNbr; 
} 

public String getPNbr() { 
    return pNbr; 
} 

public void setName(String newName) { 
    name = newName; 
} 

public String getName() { 
    return name; 
} 

public void setAccounts(ArrayList<Account> newAccounts) { 
    accounts = newAccounts; 
} 

public ArrayList<Account> getAccounts() { 
    return accounts; 
} 

public void addAccount(Account anAccount) { 
    this.getAccounts().add(anAccount); 
} 


} 

PersonApplicationクラス(愚かな名前、私が知っている)

package org.lu.ics.inlämningsuppgifter; 

import java.awt.EventQueue; 

import javax.swing.JFrame; 
import javax.swing.JButton; 
import javax.swing.JTable; 
import javax.swing.table.DefaultTableModel; 

import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 
import javax.swing.JScrollPane; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 
public class PersonApplication { 

private JFrame frame; 
private final JTable tblAccounts = new JTable(); 
private JTextField textField; 
private JTextField textField_1; 
private JTextField textField_AccNbr; 

private Controller controller; 
private PersonRegister personRegister; 

/** 
* Launch the application. 
*/ 
public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       PersonApplication window = new PersonApplication(); 
       window.frame.setVisible(true); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

/** 
* Create the application. 
*/ 
public PersonApplication() { 
    initialize(); 
} 

/** 
* Initialize the contents of the frame. 
*/ 
private void initialize() { 
    JFrame frame = new JFrame("Accounts"); 
    frame.setBounds(100, 100, 840, 524); 
    frame.getContentPane(); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.getContentPane().setLayout(null); 
    String col[] = {"Account", "Balance"}; 

    DefaultTableModel tableModel = new DefaultTableModel(col, 2); 

    JTable table = new JTable(tableModel); 

    JButton btnAddPerson = new JButton("Add person"); 
    btnAddPerson.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) { 
     } 
    }); 
    btnAddPerson.setBounds(35, 296, 105, 23); 
    frame.getContentPane().add(btnAddPerson); 

    JButton btnRemovePerson = new JButton("Remove person"); 
    btnRemovePerson.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) { 
     } 
    }); 
    btnRemovePerson.setBounds(35, 330, 107, 23); 
    frame.getContentPane().add(btnRemovePerson); 

    JButton btnFindPerson = new JButton("Find person"); 
    btnFindPerson.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) { 
      String accNumber = textField_AccNbr.getText(); 
      //String[] tmpCustomer = controller. 
     } 
    }); 
    btnFindPerson.setBounds(35, 364, 91, 23); 
    frame.getContentPane().add(btnFindPerson); 

    JButton btnAddAccount = new JButton("Add Account"); 
    btnAddAccount.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) { 
     } 
    }); 
    btnAddAccount.setBounds(269, 296, 99, 23); 
    frame.getContentPane().add(btnAddAccount); 

    JButton btnShowAccount = new JButton("Show Accounts"); 
    btnShowAccount.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) { 
      DefaultTableModel model=(DefaultTableModel) 
tblAccounts.getModel(); 

     } 
    }); 
    btnShowAccount.setBounds(439, 451, 105, 23); 
    frame.getContentPane().add(btnShowAccount); 
    tblAccounts.setBounds(439, 300, 352, 132); 
    frame.getContentPane().add(tblAccounts); 

    JLabel lblName = new JLabel("Name:"); 
    lblName.setBounds(47, 29, 31, 14); 
    frame.getContentPane().add(lblName); 

    textField = new JTextField(); 
    textField.setBounds(139, 26, 86, 20); 
    frame.getContentPane().add(textField); 
    textField.setColumns(10); 

    JLabel lblPnmbr = new JLabel("PNmbr:"); 
    lblPnmbr.setBounds(47, 57, 35, 14); 
    frame.getContentPane().add(lblPnmbr); 

    textField_1 = new JTextField(); 
    textField_1.setBounds(139, 51, 86, 20); 
    frame.getContentPane().add(textField_1); 
    textField_1.setColumns(10); 

    JLabel lblAccountNumber = new JLabel("Account number:"); 
    lblAccountNumber.setBounds(47, 90, 82, 14); 
    frame.getContentPane().add(lblAccountNumber); 

    textField_AccNbr = new JTextField(); 
    textField_AccNbr.setBounds(139, 87, 86, 20); 
    frame.getContentPane().add(textField_AccNbr); 
    textField_AccNbr.setColumns(10); 
} 
} 

PersonRegisterクラス

package org.lu.ics.inlämningsuppgifter; 

import java.util.*; 

public class PersonRegister { 

private ArrayList<Person> persons = new ArrayList<Person>(); 

public ArrayList<Person> getPersoner() { 
    return persons; 
} 

public void setPersons(ArrayList<Person> newPersons) { 
    persons = newPersons; 
} 

public void addPerson(Person newPerson) { 
    persons.add(newPerson); 
} 

public Person findPerson(String pNbr) { 
    for (Person p : this.persons) { 
     if (p.getPNbr().equals(pNbr)) { 
      return p; 
     } 
    } 
    return null; 
} 

public Person removePerson(String pNbr) { 
    Person p = findPerson(pNbr); 
    if (p != null) { 
     persons.remove(p); 
    } 
    return null; 
} 
} 

答えて

1

私は、ArrayListに表示さJTableのでGUIを作成しようとしています。このArrayListは、実際のGUIで動的に塗りつぶされるはずです。

問題は、SwingがArrayListsではなくモデルで動作することです。つまり、データを保持するカスタムTableModelを作成する必要があります。このモデルでは、ArrayListを使用してデータを保持できますが、アプリケーションはArrayListで直接動作しません。モデルのメソッドを使用してデータを追加/削除します。

PersonオブジェクトをArrayList内に保持するカスタムTableModelを作成する方法のステップバイステップの例については、Row Table Modelを参照してください。

PersonRegisterクラスは、PersonTableModelクラスとそのすべての必要なメソッドとカスタムメソッドに置き換えられます。

+0

PersonRegisterをPersonTableModelに置き換える必要がありますか? – Heeiman

+0

@Heeiman、oops、 "Row Table Model"へのリンクを忘れました。この例のリンクを調べて、始めることができます。 – camickr

関連する問題