Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2019
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.30 KB | None | 0 0
  1. package kolos;
  2. import java.awt.Color;
  3. import java.awt.Dimension;
  4. import java.awt.Graphics;
  5. import java.awt.event.ActionEvent;
  6. import java.awt.event.ActionListener;
  7. import java.awt.event.KeyEvent;
  8. import java.awt.event.KeyListener;
  9. import java.util.Collection;
  10. import java.util.HashSet;
  11. import java.util.Random;
  12.  
  13. import javax.swing.BorderFactory;
  14. import javax.swing.JButton;
  15. import javax.swing.JFrame;
  16. import javax.swing.JLabel;
  17. import javax.swing.JMenu;
  18. import javax.swing.JMenuBar;
  19. import javax.swing.JMenuItem;
  20. import javax.swing.JOptionPane;
  21. import javax.swing.JPanel;
  22. import javax.swing.JScrollPane;
  23. import javax.swing.JTable;
  24. import javax.swing.JTextField;
  25. import javax.swing.table.DefaultTableModel;
  26.  
  27. class Banknot {
  28.     String waluta;
  29.     int wartosc;
  30.  
  31.     public Banknot(String waluta, int wartosc) {
  32.         this.waluta = waluta;
  33.         this.wartosc = wartosc;
  34.     }
  35.  
  36.     @Override
  37.     public int hashCode() {
  38.         final int prime = 31;
  39.         int result = 1;
  40.         result = prime * result + ((waluta == null) ? 0 : waluta.hashCode());
  41.         result = prime * result + wartosc;
  42.         return result;
  43.     }
  44.  
  45.     @Override
  46.     public boolean equals(Object obj) {
  47.         if (this == obj)
  48.             return true;
  49.         if (obj == null)
  50.             return false;
  51.         Banknot other = (Banknot) obj;
  52.         if (waluta == null) {
  53.             if (other.waluta != null)
  54.                 return false;
  55.         } else if (!waluta.equals(other.waluta))
  56.             return false;
  57.         if (wartosc != other.wartosc)
  58.             return false;
  59.         return true;
  60.     }
  61.  
  62. // Tu proszę dopisać brakujące metody, które są niezbędne,
  63. // by obiekty klasy Banknot mogły być przechowywane w kolekcji
  64.  
  65.  
  66. } // koniec klasy Banknot
  67.  
  68.  
  69.  
  70. // KLASA POMOCNICZA DO ZADAŃ 4, 5
  71. //W TEJ KLASIE NIE TRZEBA NIC MODYFIKOWAĆ !!!
  72. class WidokKolekcji extends JScrollPane {
  73.     private static final long serialVersionUID = 1L;
  74.     private JTable tabela;
  75.     private DefaultTableModel modelTabeli;
  76.     Collection<Banknot> kolekcja;
  77.  
  78. /* Do konstruktora należy przekazać referencję
  79. * na kolekcję, której zawartość ma być wyświetlana
  80. * na panelu
  81. */
  82. WidokKolekcji(Collection<Banknot> kolekcja) {
  83.     String[] kolumny = { "Nazwa:", "Rozmiar" };
  84.     modelTabeli = new DefaultTableModel(kolumny, 0);
  85.     tabela = new JTable(modelTabeli);
  86.     tabela.setRowSelectionAllowed(false);
  87.     this.kolekcja = kolekcja;
  88.     setViewportView(tabela);
  89.     setPreferredSize(new Dimension(150, 200));
  90.     setBorder(BorderFactory.createTitledBorder("Pudelka"));
  91. }
  92.  
  93. /* Metodę refresh() należy wywołać po każdej
  94. * modyfikacji zawartości wyświetlanej kolejcji
  95. */
  96.     void refresh(){
  97.         modelTabeli.setRowCount(0);
  98.         for (Banknot p : kolekcja) {
  99.             String[] s = { p.waluta, ""+p.wartosc };
  100.             modelTabeli.addRow(s);
  101.         }
  102.     }
  103. } // koniec klasy WidokKolekcji
  104.  
  105.  
  106.  
  107.  
  108.  
  109. class Panel extends JPanel implements KeyListener {
  110.  
  111.     private static final long serialVersionUID = 1L;
  112.    
  113.     private boolean isButtonPressed = false;
  114.     private int x = 50, y = 150;
  115.    
  116.     @Override
  117.     protected void paintComponent(Graphics g) {
  118.         super.paintComponent(g);
  119.        
  120.         g.setColor(Color.BLACK);
  121.        
  122.         if(x > getSize().getWidth()-25) {
  123.             x = -25;
  124.         } else if(x < -25){
  125.             x = getSize().width-25;
  126.         }
  127.         if(y > getSize().getHeight()-25) {
  128.             y = -25;
  129.         } else if(y < -25) {
  130.             y = getSize().height-25;
  131.         }
  132.         g.drawOval(x, y, 50, 50);
  133.         if(isButtonPressed) {
  134.             g.fillOval(x, y, 50, 50);
  135.         }
  136.     }
  137.  
  138.     @Override
  139.     public void keyPressed(KeyEvent e) {
  140.         isButtonPressed = true;
  141.        
  142.         switch (e.getKeyCode()) {
  143.         case KeyEvent.VK_UP:
  144.             przesun(0, -5);
  145.             break;
  146.         case KeyEvent.VK_DOWN:
  147.             przesun(0, 5);
  148.             break;
  149.         case KeyEvent.VK_LEFT:
  150.             przesun(-5, 0);
  151.             break;
  152.         case KeyEvent.VK_RIGHT:
  153.             przesun(5, 0);
  154.             break;
  155.         }
  156.         repaint();
  157.     }
  158.  
  159.     @Override
  160.     public void keyReleased(KeyEvent e) {
  161.         isButtonPressed = false;
  162.         repaint();
  163.     }
  164.  
  165.     @Override
  166.     public void keyTyped(KeyEvent e) {
  167.         isButtonPressed = true;
  168.         repaint();
  169.     }
  170.    
  171.     public void przesun(int x, int y) {
  172.         this.x += x;
  173.         this.y += y;
  174.     }
  175.  
  176. // Tu proszę dopisać brakujące metody oraz uzupełnić
  177. // zadeklarowane poniżej metody implementujące
  178. // niezbędne interfejsy.
  179.  
  180.  
  181.  
  182.  
  183. } // koniec klasy Panel
  184.  
  185.  
  186. public class Kolos extends JFrame implements ActionListener {
  187.  
  188.     private static final long serialVersionUID = 1L;
  189.  
  190.     // Tu proszę dopisać brakujące metody oraz uzupełnić
  191.     // zadeklarowane poniżej metody implementujące
  192.     // niezbędne interfejsy.
  193.  
  194.     private Panel panel = new Panel();
  195.    
  196.     private HashSet<Banknot> banknots = new HashSet<>();
  197.    
  198.     private JMenuBar menuBar = new JMenuBar();
  199.     private JMenu file = new JMenu("Plik");
  200.     private JMenuItem authorMenu = new JMenuItem("Autor");
  201.     private JMenuItem exitMenu = new JMenuItem("Zakończ");
  202.    
  203.     private JLabel waluta = new JLabel("Waluta: ");
  204.     private JTextField walutaField = new JTextField(5);
  205.    
  206.     private JLabel wartosc = new JLabel("Wartość: ");
  207.     private JTextField wartoscField = new JTextField(5);
  208.    
  209.     private JButton authorButton = new JButton("Autor");
  210.     private JButton addButton = new JButton("Dodaj Banknot");
  211.     private JButton deleteButton = new JButton("Usuń Banknot");
  212.     private JButton deleteAllButton = new JButton("Usuń wszystkie");
  213.    
  214.     private WidokKolekcji widokKolekcji = new WidokKolekcji(banknots);
  215.  
  216.     public Kolos() {
  217.         super("Mateusz Polok");
  218.         setSize(400,400);
  219.         setLocationRelativeTo(null);
  220.         setDefaultCloseOperation(EXIT_ON_CLOSE);
  221.        
  222.         authorButton.addActionListener(this);
  223.         authorMenu.addActionListener(this);
  224.         exitMenu.addActionListener(this);
  225.         addButton.addActionListener(this);
  226.         deleteAllButton.addActionListener(this);
  227.         deleteButton.addActionListener(this);
  228.        
  229.         setJMenuBar(menuBar);
  230.         menuBar.add(file);
  231.         file.add(authorMenu);
  232.         file.add(exitMenu);
  233.        
  234.         panel.add(authorButton);
  235.        
  236.         panel.add(waluta);
  237.         panel.add(walutaField);
  238.         panel.add(wartosc);
  239.         panel.add(wartoscField);
  240.         panel.add(addButton);
  241.         panel.add(deleteButton);
  242.         panel.add(deleteAllButton);
  243.         panel.add(widokKolekcji);
  244.        
  245.         panel.addKeyListener(panel);
  246.         panel.setFocusable(true);
  247.        
  248.        
  249.         setContentPane(panel);
  250.         setVisible(true);
  251.     }
  252.  
  253.     public static void main(String[] args) {
  254.         new Kolos();
  255.        
  256.         Drukarka drukarka = new Drukarka();
  257.         Producent producentJeden = new Producent(drukarka, "Mateusz Polok", 1);
  258.         Producent producentDwa = new Producent(drukarka, "Mateusz Polok", 2);
  259.        
  260.         producentJeden.start();
  261.         producentDwa.start();
  262.     }
  263.  
  264.     @Override
  265.     public void actionPerformed(ActionEvent e) {
  266.         Object source = e.getSource();
  267.        
  268.         if(source == authorButton) {
  269.             JOptionPane.showMessageDialog(this, "Mateusz Polok", "Autor", JOptionPane.INFORMATION_MESSAGE);
  270.         }
  271.         if(source == authorMenu) {
  272.             JOptionPane.showMessageDialog(this, "Mateusz Polok", "Autor", JOptionPane.INFORMATION_MESSAGE);
  273.         }
  274.         if(source == exitMenu) {
  275.             System.exit(0);
  276.         }
  277.         if(source == addButton) {
  278.             int wartosc;
  279.             String waluta;
  280.            
  281.             try {
  282.                 wartosc = Integer.parseInt(wartoscField.getText());
  283.                 if(walutaField.getText() != null && !walutaField.getText().equals("")) {
  284.                     waluta = walutaField.getText();
  285.                     banknots.add(new Banknot(waluta, wartosc));
  286.                     widokKolekcji.refresh();
  287.                 }else {
  288.                     JOptionPane.showMessageDialog(this, "Pole waluta nie moze byc puste", "Błąd", JOptionPane.ERROR_MESSAGE);
  289.                 }
  290.             }catch (NumberFormatException e1) {
  291.                 JOptionPane.showMessageDialog(this, "W polu wartość musi być liczba całkowita", "Błąd", JOptionPane.ERROR_MESSAGE);
  292.             }
  293.         }
  294.         if(source == deleteAllButton){
  295.             banknots.removeAll(banknots);
  296.             walutaField.setText("");
  297.             wartoscField.setText("");
  298.             widokKolekcji.refresh();
  299.         }
  300.         if(source == deleteButton) {
  301.             int wartosc;
  302.             String waluta;
  303.            
  304.             try {
  305.                 wartosc = Integer.parseInt(wartoscField.getText());
  306.                 if(walutaField.getText() != null && !walutaField.getText().equals("")) {
  307.                     waluta = walutaField.getText();
  308.                    
  309.                     banknots.remove(new Banknot(waluta, wartosc));
  310.                     widokKolekcji.refresh();
  311.                 }else {
  312.                     JOptionPane.showMessageDialog(this, "Pole waluta nie moze byc puste", "Błąd", JOptionPane.ERROR_MESSAGE);
  313.                 }
  314.             }catch (NumberFormatException e1) {
  315.                 JOptionPane.showMessageDialog(this, "W polu wartość musi być liczba całkowita", "Błąd", JOptionPane.ERROR_MESSAGE);
  316.             }
  317.         }
  318.         panel.requestFocus();
  319.     }
  320.  
  321. } // koniec klasy Okno
  322.  
  323.  
  324. //KLASA POMOCNICZA DO ZADANIA NR 6
  325. class Drukarka {
  326.  
  327.     volatile int id = 0; // id Producenta, który ostatnio korzystał z drukarki
  328.     int nr = 0; // numer zadania (automatycznie incrementowany).
  329.  
  330. // Proszę zmodyfikować metodę drukuj zgodnie z wytycznymi do zadania 6.
  331.  
  332.     synchronized void drukuj(String tekst, int id) {
  333.         if(this.id == id) {
  334.             try {
  335.                 wait();
  336.             } catch (InterruptedException e) {
  337.                 e.printStackTrace();
  338.             }
  339.         } else {
  340.             System.out.println(nr++ + ": " + tekst + " " + id);
  341.             this.id = id;
  342.         }
  343.         notify();
  344.  
  345.     }
  346. } // koniec klasy Drukarka
  347.  
  348.  
  349. // KLASA POMOCNICZA DO ZADANIA NR 6
  350. // W TEJ KLASIE NIE TRZEBA NIC MODYFIKOWAĆ!!!
  351. class Producent extends Thread {   
  352.     Drukarka drukarka;
  353.     String tekst;
  354.     int id;
  355.  
  356.     public Producent(Drukarka drukarka, String tekst, int id) {
  357.         this.drukarka = drukarka;
  358.         this.tekst = tekst;
  359.         this.id = id;
  360.     }
  361.  
  362.     @Override
  363.     public void run() {
  364.         Random random = new Random();
  365.         while (true){
  366.             drukarka.drukuj(tekst, id);
  367.             try {
  368.                 sleep(500 + random.nextInt(3000));
  369.             } catch (InterruptedException e) { }
  370.         }
  371.     }  
  372.     } // koniec klasy Producent
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement