Answer to Question #284860 in Java | JSP | JSF for User12345

Question #284860

Write a program to keep records and perform statistical analysis for a team of players. The information of each Player contains ID, Name, Gender, match scores int[] (size should be total matches played), The program will prompt the user to choose the operation of records from a menu on JFrame as shown below:

============================================

                                            Menu


============================================

1. Add Player record

2. Delete Player record

3. Update Player record

4. View all Players (in JTable on JFrame)

5. Calculate the average of a selected Player’s score.

6. Find Player by ID (display details of player in Jtextarea).

Ask the user to enter his/her choice then perform the desired function.

 Note: All records store in a Array List of Players and use JFrame.


1
Expert's answer
2022-01-05T01:40:23-0500
import javax.swing.*;
import java.awt.*;
import java.util.ArrayList;
import java.util.Arrays;

public class Main extends JFrame {

    private ArrayList<Player> players;
    private JPanel rootPanel;

    public Main() {

        players = new ArrayList<>();
        players.add(new Player(1, "1", 'M', new int[]{1, 23}));
        players.add(new Player(2, "22", 'F', new int[]{1, 2}));
        players.add(new Player(3, "33", 'F', new int[]{0, 2}));
        players.add(new Player(41, "11", 'M', new int[]{11, 223}));

        rootPanel = new JPanel();
        add(rootPanel);
        menu();
        //pack();
        setSize(450, 300);
        setVisible(true);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }

    private void modifyList(int item) {
        String[] labelsNames = {"ID", "Name", "Gender", "Scores"};
        JLabel[] jLabels = new JLabel[labelsNames.length];
        JTextField[] jTextFields = new JTextField[jLabels.length];

        JPanel mainPanel = new JPanel();
        mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));

        for (int i = 0; i < labelsNames.length; i++) {
            jLabels[i] = new JLabel(labelsNames[i]);
            jTextFields[i] = new JTextField();
            jTextFields[i].setPreferredSize(new Dimension(100, 20));
            if (i > 0) {
                jTextFields[i].setEditable(item != 2);
            }
            JPanel jPanel = new JPanel();
            jPanel.setLayout(new BoxLayout(jPanel, BoxLayout.X_AXIS));
            jPanel.add(jLabels[i]);
            jPanel.add(jTextFields[i]);
            mainPanel.add(jPanel);
        }

        JButton jButton = new JButton(item == 1 ? "Add" : item == 2 ? "Delete" : item == 3 ? "Update" : "?");
        jButton.addActionListener(e -> {
            if (item == 1) {
                try {
                    if (findPlayer(Integer.parseInt(jTextFields[0].getText())) == null) {
                        String[] values = jTextFields[3].getText().split(" ");
                        int[] scores = new int[values.length];
                        for (int i = 0; i < values.length; i++) {
                            scores[i] = Integer.parseInt(values[i]);
                        }
                        players.add(new Player(Integer.parseInt(jTextFields[0].getText()), jTextFields[1].getText(),
                                jTextFields[2].getText().charAt(0), scores));
                    }
                } catch (Exception ex) {
                }
            } else if (item == 2) {
                try {
                    Player player = findPlayer(Integer.parseInt(jTextFields[0].getText()));
                    if (player != null) {
                        players.remove(player);
                    }
                } catch (Exception ex) {
                }
            } else if (item == 3) {
                try {
                    Player player = findPlayer(Integer.parseInt(jTextFields[0].getText()));
                    if (player != null) {
                        if (jTextFields[1].getText().length() > 0) {
                            player.setName(jTextFields[1].getText());
                        }
                        if (jTextFields[2].getText().length() > 0) {
                            player.setGender(jTextFields[2].getText().charAt(0));
                        }
                        if (jTextFields[3].getText().length() > 0) {
                            String[] values = jTextFields[3].getText().split(" ");
                            int[] scores = new int[values.length];
                            for (int i = 0; i < values.length; i++) {
                                scores[i] = Integer.parseInt(values[i]);
                            }
                            player.setMatchScores(scores);
                        }
                    }
                } catch (Exception ex) {
                }
            }
        });
        JButton jBackButton = new JButton("Back");
        jBackButton.addActionListener(e -> {
            menu();
        });
        mainPanel.add(jButton);
        mainPanel.add(jBackButton);
        rootPanel.removeAll();
        rootPanel.add(mainPanel);
        refresh();
    }

    private void average() {
        String[] labelsNames = {"ID", "Average"};
        JLabel[] jLabels = new JLabel[labelsNames.length];
        JTextField[] jTextFields = new JTextField[jLabels.length];

        JPanel mainPanel = new JPanel();
        mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));

        for (int i = 0; i < labelsNames.length; i++) {
            jLabels[i] = new JLabel(labelsNames[i]);
            jTextFields[i] = new JTextField();
            jTextFields[i].setMaximumSize(new Dimension(100, 20));
            if (i > 0) {
                jTextFields[i].setEditable(false);
            }
            JPanel jPanel = new JPanel();
            jPanel.setLayout(new BoxLayout(jPanel, BoxLayout.X_AXIS));
            jPanel.add(jLabels[i]);
            jPanel.add(jTextFields[i]);
            mainPanel.add(jPanel);
        }

        JButton jButton = new JButton("Average");
        jButton.addActionListener(e -> {
            try {
                Player player = findPlayer(Integer.parseInt(jTextFields[0].getText()));
                if (player != null) {
                    int[] scores = player.getMatchScores();
                    double average = 0;
                    for (int i = 0; i < scores.length; i++) {
                        average += scores[i];
                    }
                    jTextFields[labelsNames.length - 1].setText(String.format("%.2f", average / scores.length));
                }
            } catch (Exception ex) {
            }
        });
        JButton jBackButton = new JButton("Back");
        jBackButton.addActionListener(e -> {
            menu();
        });
        mainPanel.add(jButton);
        mainPanel.add(jBackButton);
        rootPanel.removeAll();
        rootPanel.add(mainPanel);
        refresh();
    }

    private void displayTable() {
        String[][] data = new String[players.size()][];
        for (int i = 0; i < data.length; i++) {
            data[i] = new String[4];
            data[i][0] = Integer.toString(players.get(i).getId());
            data[i][1] = players.get(i).getName();
            data[i][2] = Character.toString(players.get(i).getGender());
            data[i][3] = Arrays.toString(players.get(i).getMatchScores());
        }
        String[] columnNames = {"ID", "Name", "Gender", "Scores"};
        JTable jTable = new JTable(data, columnNames);

        JScrollPane jScrollPane = new JScrollPane(jTable);
        jScrollPane.setPreferredSize(new Dimension(400, 180));

        JPanel mainPanel = new JPanel();
        mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));

        JButton jBackButton = new JButton("Back");
        jBackButton.addActionListener(e -> {
            menu();
        });
        mainPanel.add(jScrollPane);
        mainPanel.add(jBackButton);

        rootPanel.removeAll();
        rootPanel.add(mainPanel);
        refresh();
    }

    private void findPlayer() {

        JLabel jLabel = new JLabel("ID");
        JTextField jTextField = new JTextField();

        JTextArea jTextArea = new JTextArea();
        jTextArea.setEditable(false);
        jTextArea.setLineWrap(false);
        jTextArea.setSize(200, 100);

        JPanel mainPanel = new JPanel();
        mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));

        JPanel jPanel = new JPanel();
        jPanel.setLayout(new BoxLayout(jPanel, BoxLayout.X_AXIS));
        jPanel.add(jLabel);
        jPanel.add(jTextField);
        mainPanel.add(jPanel);
        mainPanel.add(jTextArea);

        JButton jButton = new JButton("Find");
        jButton.addActionListener(e -> {
            try {
                Player player = findPlayer(Integer.parseInt(jTextField.getText()));
                if (player != null) {
                    jTextArea.setText(player.toString());
                }
            } catch (Exception ex) {
            }
        });
        JButton jBackButton = new JButton("Back");
        jBackButton.addActionListener(e -> {
            menu();
        });
        mainPanel.add(jButton);
        mainPanel.add(jBackButton);
        rootPanel.removeAll();
        rootPanel.add(mainPanel);
        refresh();
    }

    private void menu() {
        String[] buttonsNames = {"1. Add Player record",
                "2. Delete Player record",
                "3. Update Player record",
                "4. View all Players",
                "5. Calculate the average of a selected Player’s score",
                "6. Find Player by ID"};
        JButton[] jButtons = new JButton[buttonsNames.length];

        JPanel mainPanel = new JPanel();
        mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));

        for (int i = 0; i < buttonsNames.length; i++) {
            jButtons[i] = new JButton(buttonsNames[i]);
            JPanel jPanel = new JPanel();
            jPanel.setLayout(new BoxLayout(jPanel, BoxLayout.X_AXIS));
            jPanel.add(jButtons[i]);
            mainPanel.add(jPanel);
        }
        jButtons[0].addActionListener(e -> {
            modifyList(1);
        });
        jButtons[1].addActionListener(e -> {
            modifyList(2);
        });
        jButtons[2].addActionListener(e -> {
            modifyList(3);
        });
        jButtons[3].addActionListener(e -> {
            displayTable();
        });
        jButtons[4].addActionListener(e -> {
            average();
        });
        jButtons[5].addActionListener(e -> {
            findPlayer();
        });
        rootPanel.removeAll();
        rootPanel.add(mainPanel);
        refresh();
    }

    private void refresh(){
        revalidate();
        repaint();
    }

    private Player findPlayer(int id) {
        for (Player player : players) {
            if (id == player.getId()) {
                return player;
            }
        }
        return null;
    }

    public static void main(String[] args) {
        new Main();
    }
}


import java.util.Arrays;

public class Player {

    private int id;
    private String name;
    private char gender;
    private int[] matchScores;

    public Player(int id, String name, char gender, int[] matchScores) {
        this.id = id;
        this.name = name;
        this.gender = gender;
        this.matchScores = matchScores;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public char getGender() {
        return gender;
    }

    public void setGender(char gender) {
        this.gender = gender;
    }

    public int[] getMatchScores() {
        return matchScores;
    }

    public void setMatchScores(int[] matchScores) {
        this.matchScores = matchScores;
    }

    @Override
    public String toString() {
        return id + " " + name + " " + gender + "\nScores: " + Arrays.toString(matchScores);
    }
}

Need a fast expert's response?

Submit order

and get a quick answer at the best price

for any assignment or question with DETAILED EXPLANATIONS!

Comments

No comments. Be the first!

Leave a comment

LATEST TUTORIALS
New on Blog