0

How do I get my multi dimensional array to output all results from User class to Email_GUI class so I can input it as my data for JTable? Currently, it only display one result. Should I create a method using the logic in user class that runs trough the whole array [][]? if so, what would that look like?

NOTE: JTable only accept an array [][] as data input.

Email _GUI class:

 else if (e.getSource() == searchB) {
            searchB.setFocusable(false); // removes the border around create button
            firstName = fNameTF.getText().trim().toLowerCase();
            middleName = mNameTF.getText().trim().toLowerCase();
            lastName = lNameTF.getText().trim().toLowerCase();
            department = depTF.getText().trim().toLowerCase();
            userID = iDTF.getText().trim();
            userInformation = new User(firstName, middleName, lastName, department, passWord);
            //DefaultTableModel dTM = new DefaultTableModel(userInformation.pullUserInfo(userID),resultsColumnNames );
            resultTF = new JTable(userInformation.pullUserInfo(userID));
            resultTF.setAutoCreateRowSorter(true);
            resultTF.setShowGrid(false);
  

User Class:

 public class User {

    //Fields
    private String firstName;
    private String lastName;
    private String middleName;
    private String department;
    private String password;
    private int userID;
    private String[][] stringB;
    private  DefaultTableModel dTM;

// Method to search for user information 
    public DefaultTableModel pullUserInfo(String id) {
        String [] resultsColumnNames = {"User ID", "First Name", "Middle Name", "Last Name" , "Department", "Password", "Email"};
        String iD = id;
        String line;
        try {
            BufferedReader bufferRead = new BufferedReader(new FileReader("userFile.txt"));
            while ((line = bufferRead.readLine()) != null) {
                String[] rows = line.split(" ,");
                stringB = new String[rows.length][];

                // Return results for ID only if all remaining fields are blank
                if (line.startsWith(iD) && !iD.isBlank() && getFirstName().isBlank() && getMiddleName().isBlank() && getLastName().isBlank() && getDepartment().isBlank()) {

                }
                // Return results for first name only and all the remaining fields are empty
                if (iD.isBlank() && line.contains(getFirstName()) && !getFirstName().isBlank() && getMiddleName().isBlank() && getLastName().isBlank() && getDepartment().isBlank()) {
                    int r = 0;
                    for (String row : rows) {

                        stringB[r++] = row.split(" ");
                        
                        dTM = new DefaultTableModel(stringB, resultsColumnNames );
                    }

                      

                }
                // Return results first name and middle name being entered and the rest of fields are emtpy
                if (iD.isBlank() && line.contains(getFirstName()) && !getFirstName().isBlank() && line.contains(getMiddleName()) && !getMiddleName().isBlank() && getLastName().isBlank() && getDepartment().isBlank()) {

                }
                // Return results first name, middle name, and last name, being entered and the rest of fields are emtpy
                if (iD.isBlank() && line.contains(getFirstName()) && !getFirstName().isBlank() && line.contains(getMiddleName()) && !getMiddleName().isBlank() && line.contains(getLastName()) && !getLastName().isBlank() && getDepartment().isBlank()) {

                }
                // Return results first name, middle name, last name, and department being entered an

Expected output via IDE:

[1, [william], [herbert], [jackson], [tcdl], [Password123456],[[email protected]]]

[[2], [andrew], [william], [jackson], [cdls], [ITdepartment1234], [[email protected]]]

[[4], [william], [], [jackson], [it], [1qazxsw2#EDCVFR$], [[email protected]]]

Actual Output: Screenshot of output

Whole User Class:

/* 
*File: Email_GUI.java
*Author: William
*Date: May 25, 2021
*Purpose: This program processes user information
 */

import java.text.*;
import java.util.*;
import java.util.Map.Entry;
import java.util.concurrent.atomic.AtomicInteger;
import java.io.*;
import javax.swing.table.DefaultTableModel;

public class User {

    //Fields
    private String firstName;
    private String lastName;
    private String middleName;
    private String department;
    private String password;
    private int userID;
    private String[][] stringB;
    private DefaultTableModel dTM;

    //Constructor that processe user information
    public User(String fName, String mName, String lName, String depart, String pass) {
        this.firstName = fName;
        this.middleName = mName;
        this.lastName = lName;
        this.department = depart;
        this.password = pass;
    }

    public void setFirstName(String firstN) {
        this.firstName = firstN;

    }

    public void setMiddleName(String middleN) {
        this.middleName = middleN;

    }

    public void setLastName(String lastN) {
        this.lastName = lastN;

    }

    public void setDepartment(String dep) {
        this.department = dep;

    }

    public void setPassword(String pass) {
        this.password = pass;

    }

    public void setID(int iDent) {
        this.userID = iDent;
    }

    // get methods
    public String getFirstName() {
        return firstName;
    }

    public String getMiddleName() {
        return middleName;
    }

    public String getLastName() {
        return lastName;
    }

    public String getDepartment() {
        return department;
    }

    public String getPassword() {
        return password;
    }

    public int getUserID() {
        return userID;
    }

    // method to generate email. This is being called in the StoreUserInfo() method
    public String userEmailGeneration(String firstName, String middleName, String lastName, String department, String userExist) {
        String email = null;
        Random emailNumberGenerator = new Random();
        int numberRandom = emailNumberGenerator.nextInt(500);

        switch (userExist) {
            case "false":
                if (middleName.isBlank()) {
                    email = firstName + "." + lastName + "@" + department + ".company.com";
                } else {
                    email = firstName + "." + middleName.charAt(0) + "." + lastName + "@" + department + ".company.com";
                }
                break;
            case "true":
                if (middleName.isBlank()) {
                    email = firstName + "." + lastName + numberRandom + "@" + department + ".company.com";
                } else {
                    email = firstName + "." + middleName.charAt(0) + "." + lastName + numberRandom + "@" + department + ".company.com";
                }

        }

        return email;

    }

    // Method to store the user's informatino like Firstname, LastName,etc...
    public void storeUserInfo() {
        AtomicInteger iDCount = new AtomicInteger(0);
        String userExist = "false";
        String userEmail = userEmailGeneration(getFirstName(), getMiddleName(), getLastName(), getDepartment(), userExist);
        try {
            FileWriter userFileWriter = new FileWriter("userFile.txt", true); // writes to the file and creates it if it does not exist
            Scanner scanFile = new Scanner(new File("userFile.txt"));
            while (scanFile.hasNext()) {
                iDCount = new AtomicInteger(scanFile.nextInt());
                if (scanFile.nextLine().contains(userEmail)) {
                    userExist = "true";
                }
            }
            scanFile.close();
            userID = iDCount.incrementAndGet();
            BufferedWriter bufferWriter = new BufferedWriter(userFileWriter); // Buffer to hold and write the user information
            bufferWriter.write(userID + " " + getFirstName() + " " + getMiddleName() + " " + getLastName() + " " + getDepartment()
                    + " " + getPassword() + " " + userEmailGeneration(getFirstName(), getMiddleName(), getLastName(), getDepartment(), userExist));
            bufferWriter.newLine();
            bufferWriter.close();
        } catch (IOException e) {
            System.out.println("Error: has occured with file creation or location");

        }

    }

    // Method to search for user information 
    public DefaultTableModel pullUserInfo(String id) throws FileNotFoundException, IOException {
        String[] resultsColumnNames = {"User ID", "First Name", "Middle Name", "Last Name", "Department", "Password", "Email"};
        String iD = id;
        String line;
        try (BufferedReader bufferRead = new BufferedReader(new FileReader("userFile.txt"))) {
            while ((line = bufferRead.readLine()) != null) {
                String[] rows = line.split(" ,");
                stringB = new String[rows.length][];
                
                // Return results for ID only if all remaining fields are blank
                if (line.startsWith(iD) && !iD.isBlank() && getFirstName().isBlank() && getMiddleName().isBlank() && getLastName().isBlank() && getDepartment().isBlank()) {
                    int r = 0;
                    for (String row : rows) {
                        stringB[r++] = row.split(" ");
                        dTM = new DefaultTableModel(stringB, resultsColumnNames);
                    }
                }
                // Return results for first name only and all the remaining fields are empty
                if (iD.isBlank() && line.contains(getFirstName()) && !getFirstName().isBlank() && getMiddleName().isBlank() && getLastName().isBlank() && getDepartment().isBlank()) {
                    int r = 0;
                    for (String row : rows) {
                        stringB[r++] = row.split(" ");
                        dTM = new DefaultTableModel(stringB, resultsColumnNames);
                    }
                    
                }
                // Return results first name and middle name being entered and the rest of fields are emtpy
                if (iD.isBlank() && line.contains(getFirstName()) && !getFirstName().isBlank() && line.contains(getMiddleName()) && !getMiddleName().isBlank() && getLastName().isBlank() && getDepartment().isBlank()) {
                    int r = 0;
                    for (String row : rows) {
                        stringB[r++] = row.split(" ");
                        dTM = new DefaultTableModel(stringB, resultsColumnNames);
                      
                    }
                }
                // Return results first name, middle name, and last name, being entered and the rest of fields are emtpy
                if (iD.isBlank() && line.contains(getFirstName()) && !getFirstName().isBlank() && line.contains(getMiddleName()) && !getMiddleName().isBlank() && line.contains(getLastName()) && !getLastName().isBlank() && getDepartment().isBlank()) {
                    int r = 0;
                    for (String row : rows) {
                        stringB[r++] = row.split(" ");
                        dTM = new DefaultTableModel(stringB, resultsColumnNames);
                    }
                }
                // Return results first name, middle name, last name, and department being entered and the rest of fields are emtpy
                if (iD.isBlank() && line.contains(getFirstName()) && !getFirstName().isBlank() && line.contains(getMiddleName()) && !getMiddleName().isBlank() && line.contains(getLastName()) && !getLastName().isBlank() && line.contains(getDepartment()) && !getDepartment().isBlank()) {
                    int r = 0;
                    for (String row : rows) {
                        stringB[r++] = row.split(" ");
                        dTM = new DefaultTableModel(stringB, resultsColumnNames);
                    }
                }
                // Return results middle name and the rest of fields are emtpy
                if (iD.isBlank() && getFirstName().isBlank() && line.contains(getMiddleName()) && !getMiddleName().isBlank() && getLastName().isBlank() && getDepartment().isBlank()) {
                    int r = 0;
                    for (String row : rows) {
                        stringB[r++] = row.split(" ");
                        dTM = new DefaultTableModel(stringB, resultsColumnNames);
                    }
                }
                // Return results middle name and Last name while the rest of fields are emtpy
                if (iD.isBlank() && getFirstName().isBlank() && line.contains(getMiddleName()) && !getMiddleName().isBlank() && line.contains(getLastName()) && !getLastName().isBlank() && getDepartment().isBlank()) {
                    int r = 0;
                    for (String row : rows) {
                        stringB[r++] = row.split(" ");
                        dTM = new DefaultTableModel(stringB, resultsColumnNames);
                    }
                }
                // Return results middle name, Last name, and department while the rest of fields are emtpy
                if (iD.isBlank() && getFirstName().isBlank() && line.contains(getMiddleName()) && !getMiddleName().isBlank() && line.contains(getLastName()) && !getLastName().isBlank() && line.contains(getDepartment()) && !getDepartment().isBlank()) {
                    int r = 0;
                    for (String row : rows) {
                        stringB[r++] = row.split(" ");
                        dTM = new DefaultTableModel(stringB, resultsColumnNames);
                    }
                }
                // Return results  Last name while the rest of fields are emtpy
                if (iD.isBlank() && getFirstName().isBlank() && getMiddleName().isBlank() && line.contains(getLastName()) && !getLastName().isBlank() && getDepartment().isBlank()) {
                    int r = 0;
                    for (String row : rows) {
                        stringB[r++] = row.split(" ");
                        dTM = new DefaultTableModel(stringB, resultsColumnNames);
                    }
                }
                // Return results  Last name while the rest of fields are emtpy
                if (iD.isBlank() && getFirstName().isBlank() && getMiddleName().isBlank() && line.contains(getLastName()) && !getLastName().isBlank() && line.contains(getDepartment()) && !getDepartment().isBlank()) {
                    int r = 0;
                    for (String row : rows) {
                        stringB[r++] = row.split(" ");
                        dTM = new DefaultTableModel(stringB, resultsColumnNames);
                    }
                }
                // Return results  lastname, and first name while the rest of fields are empty
                if (iD.isBlank() && line.contains(getFirstName()) && !getFirstName().isBlank() && getMiddleName().isBlank() && line.contains(getLastName()) && !getLastName().isBlank() && getDepartment().isBlank()) {
                    int r = 0;
                    for (String row : rows) {
                        stringB[r++] = row.split(" ");
                        dTM = new DefaultTableModel(stringB, resultsColumnNames);
                    }
                }
                // Return results  lastname, department, and first name while the rest of fields are empty
                if (iD.isBlank() && line.contains(getFirstName()) && !getFirstName().isBlank() && getMiddleName().isBlank() && line.contains(getLastName()) && !getLastName().isBlank() && line.contains(getDepartment()) && !getDepartment().isBlank()) {
                    int r = 0;
                    for (String row : rows) {
                        stringB[r++] = row.split(" ");
                        dTM = new DefaultTableModel(stringB, resultsColumnNames);
                    }
                }
                // Return results department, while the rest of fields are empty
                if (iD.isBlank() && getFirstName().isBlank() && getMiddleName().isBlank() && getLastName().isBlank() && line.contains(getDepartment()) && !getDepartment().isBlank()) {
                    int r = 0;
                    for (String row : rows) {
                        stringB[r++] = row.split(" ");
                        dTM = new DefaultTableModel(stringB, resultsColumnNames);
                    }
                }
                // Return results department, and first name while the rest of fields are empty
                if (iD.isBlank() && line.contains(getFirstName()) && !getFirstName().isBlank() && getMiddleName().isBlank() && getLastName().isBlank() && line.contains(getDepartment()) && !getDepartment().isBlank()) {
                    int r = 0;
                    for (String row : rows) {
                        stringB[r++] = row.split(" ");
                        dTM = new DefaultTableModel(stringB, resultsColumnNames);
                    }
                }
                // Return results department, and middle name while the rest of fields are empty
                if (iD.isBlank() && getFirstName().isBlank() && line.contains(getMiddleName()) && !getMiddleName().isBlank() && getLastName().isBlank() && line.contains(getDepartment()) && !getDepartment().isBlank()) {
                    int r = 0;
                    for (String row : rows) {
                        stringB[r++] = row.split(" ");
                        dTM = new DefaultTableModel(stringB, resultsColumnNames);
                    }
                }
                // Return results department,first name, and middle name while the rest of fields are empty
                if (iD.isBlank() && line.contains(getFirstName()) && !getFirstName().isBlank() && line.contains(getMiddleName()) && !getMiddleName().isBlank() && getLastName().isBlank() && line.contains(getDepartment()) && !getDepartment().isBlank()) {
                    
                }
            }
        }

        return dTM;

    }

    //create two dimension array method that takes in the LINE data.
    // create anoter medthod that simply spits out the two dimensional array to the TF of the main class
}

2 Answers 2

1

This is the general framework. You can add in your missing values policy:

    // Method to search for user information
public static DefaultTableModel pullUserInfo(String id) throws FileNotFoundException, IOException {
    String[] resultsColumnNames = { "User ID", "First Name", "Middle Name", "Last Name", "Department", "Password",
            "Email" };
    DefaultTableModel result = new DefaultTableModel(0, resultsColumnNames.length);
    String line = null;
    try (BufferedReader bufferRead = new BufferedReader(new FileReader("userFile.txt"))) {
        while ((line = bufferRead.readLine()) != null) {
            String[] row = line.split("\\s*,\\s*");
            result.addRow(row);
        }
    }
    result.setColumnIdentifiers(resultsColumnNames);

    return result;

}
Sign up to request clarification or add additional context in comments.

8 Comments

I did just this, it didnt work. nothing shows up in my JTable. When i print out StringB in the User class, near the return, all i get is null. However, when i print it out when in the while, it prints out the expected output
Please edit to your current code
I edited to reflect my changes. I now have an issue of only one resutl is showing up
You create the DefaultTableModel in the wrong place. It should be after the forloop. It's difficult to read your code as you didn't post the whole User class, ending part way through a method
I have uploaded the whole user class. When I put it outside the for loop, it returns only one results as if inside the for loop. However, if to a deeptoarray print, it shows expected output.
|
0

I figured it out.I just added the bufferread.realine() to my row of my defaultTableModel. I pays to take a break and then revisit the code when all rested:

// Method to search for user information 
    public DefaultTableModel pullUserInfo(String id) throws FileNotFoundException, IOException {
        // Column Names for the Default Table model that is pushed to JTable in Email_GUI class
        String[] resultsColumnNames = {"User ID", "First Name", "Middle Name", "Last Name", "Department", "Password", "Email"};
        dTM = new DefaultTableModel(0, resultsColumnNames.length);
        dTM.setColumnIdentifiers(resultsColumnNames);
        String iD = id;
        String line;
        try ( BufferedReader bufferRead = new BufferedReader(new FileReader("userFile.txt"))) {
            while ((line = bufferRead.readLine()) != null) {

                // Return results for ID only if all remaining fields are blank
                if (line.startsWith(iD) && !iD.isBlank() && getFirstName().isBlank() && getMiddleName().isBlank() && getLastName().isBlank() && getDepartment().isBlank()) {
                    dTM.addRow(line.split(" "));
                }

return dTM;

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.