[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/biblelamp/JavaExercises/master/Java%201/SwingHungryCats.java [Back]  [Original]

/**
 * Java. Level 1. Lesson 7. Additional homework
 *
 * @author Sergey Iryupin
 * @version 0.2 dated Jul 19, 2019
 * @see HW7Lesson.java using classes Cat and Plate
 */
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Random;

class SwingHungryCats extends JFrame {

    final String TITLE_OF_PROGRAM = "Hungry Cats";
    final String BTN_ADD_FOOD = "Add food";
    final String BTN_FEED_CATS = "Feed cats";
    final String BTN_RESET = "Reset";
    final int WINDOW_WIDTH = 300;
    final int WINDOW_HEIGHT = 400;
    final int PLATE_VOLUME = 50;
    final int PLATE_INIT = 25;
    final int PLATE_ADD = 5;
    final int NUMBER_OF_CATS = 10;
    final int MAX_APPETITE = 20;

    Panel panel;
    SwingPlate plate; // plate with food
    SwingCat[] cats;  // array of cats

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

    SwingHungryCats() {
        setTitle(TITLE_OF_PROGRAM);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
        setLocationRelativeTo(null); // to the center
        setResizable(false);

        panel = new Panel();
        panel.setBackground(Color.white);

        Random random = new Random();
        plate = new SwingPlate(PLATE_VOLUME, PLATE_INIT);
        cats = new SwingCat[NUMBER_OF_CATS];
        for (int i = 0; i < cats.length; i++)
            cats[i] = new SwingCat("", random.nextInt(MAX_APPETITE) + 1);

        JButton btnAdd = new JButton(BTN_ADD_FOOD);
        btnAdd.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                plate.add(PLATE_ADD);
                panel.repaint();
            }
        });
        JButton btnFeed = new JButton(BTN_FEED_CATS);
        btnFeed.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                for (SwingCat cat : cats) {
                    cat.eat(plate);
                }
                panel.repaint();
            }
        });
        JButton btnReset = new JButton(BTN_RESET);
        btnReset.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                for (SwingCat cat : cats) {
                    cat.setFullness(false);
                }
                panel.repaint();
            }
        });

        JPanel btnPanel = new JPanel();
        btnPanel.setLayout(new GridLayout()); // for button panel
        btnPanel.add(btnAdd);
        btnPanel.add(btnFeed);
        btnPanel.add(btnReset);

        setLayout(new BorderLayout()); // for main window
        add(btnPanel, BorderLayout.NORTH);
        add(panel, BorderLayout.CENTER);
        setVisible(true);
    }

    class Panel extends JPanel { // for painting
        @Override
        public void paint(Graphics g) {
            super.paint(g);
            Dimension size = this.getSize();
            plate.paint(g, (int)size.getWidth(), 20);
            for (int i = 0; i < cats.length; i++) {
                cats[i].paint(g, (i + 1) * 30 + 10,
                    (int)(size.getWidth()) / PLATE_VOLUME, 20);
            }
        }
    }
}

class SwingCat extends Cat {

    SwingCat(String name, int appetite) {
        super(name, appetite);
    }

    void paint(Graphics g, int y, int dx, int dy) {
        if (fullness) {
            g.setColor(Color.green);
            g.fill3DRect(20, y, appetite * dx + 1, dy + 1, true);
        }
        g.setColor(Color.black);
        g.drawRect(20, y, appetite * dx, dy);
    }
}

class SwingPlate extends Plate {

    SwingPlate(int volume, int food) {
        super(volume, food);
    }

    void paint(Graphics g, int windowWidth, int dy) {
        g.setColor(Color.red);
        g.fill3DRect(10, 10, food * (windowWidth - 20) / volume + 1, dy + 1, false);
        g.setColor(Color.black);
        g.drawRect(10, 10, windowWidth - 20, dy);
    }
}

Web Proxy Viewer  |  New URL  |  Original Page