Advertisement
Guest User

Untitled

a guest
Dec 19th, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 10.23 KB | None | 0 0
  1. import javax.swing.*;
  2. import javax.swing.table.DefaultTableModel;
  3.  
  4. import java.awt.*;
  5. import java.awt.event.*;
  6. import java.util.*;
  7.  
  8. /*=======  TU PROSZE SIE PODPISAC ==============================
  9.  *      Imie: Piotr
  10.  *  Nazwisko: Lasek
  11.  *Nr indeksu: 235690
  12.  *==============================================================
  13.  */
  14. class Circle implements Comparable<Circle>{
  15.  
  16.     private int x, y, d;
  17.     private String name = "name";
  18.    
  19.    
  20.    
  21.     @Override
  22.     public int hashCode() {
  23.         final int prime = 31;
  24.         int result = 1;
  25.         result = prime * result + d;
  26.         result = prime * result + x;
  27.         result = prime * result + y;
  28.         return result;
  29.     }
  30.  
  31.     @Override
  32.     public boolean equals(Object obj) {
  33.         if (this == obj)
  34.             return true;
  35.         if (obj == null)
  36.             return false;
  37.         if (getClass() != obj.getClass())
  38.             return false;
  39.         Circle other = (Circle) obj;
  40.         if (d != other.d)
  41.             return false;
  42.         if (x != other.x)
  43.             return false;
  44.         if (y != other.y)
  45.             return false;
  46.         return true;
  47.     }
  48.  
  49.    
  50.     public Circle(int cx, int cy, int cd) {
  51.         x = cx - cd/2;
  52.         y = cy - cd/2;
  53.         d = cd;
  54.         name = "" + "(" + x + ", " + y + ", " + d + ")";
  55.         // TODO Auto-generated constructor stub
  56.     }
  57.  
  58.     public Circle(int cx, int cy, int cd, String name) {
  59.        
  60.         x = cx - cd/2;
  61.         y = cy - cd/2;
  62.         d = cd;
  63.         this.name = name;
  64.     }
  65.  
  66.  
  67.     public void przesun(int cx, int cy)
  68.     {
  69.         x+=cx;
  70.         y+=cy;
  71.     }
  72.    
  73.     public void rysuj(Graphics g)
  74.     {
  75.         g.fillOval(x, y, d, d);
  76.     }
  77.    
  78.     public int getX() {
  79.         return x;
  80.     }
  81.  
  82.  
  83.  
  84.     public void setX(int x) {
  85.         this.x = x;
  86.     }
  87.  
  88.  
  89.  
  90.     public int getY() {
  91.         return y;
  92.     }
  93.  
  94.  
  95.  
  96.     public void setY(int y) {
  97.         this.y = y;
  98.     }
  99.  
  100.  
  101.  
  102.     public int getD() {
  103.         return d;
  104.     }
  105.  
  106.  
  107.  
  108.     public void setD(int d) {
  109.         this.d = d;
  110.     }
  111.  
  112.  
  113.     public String getName() {
  114.         return name;
  115.     }
  116.  
  117.  
  118.  
  119.     public void setName(String name) {
  120.         this.name = name;
  121.     }
  122.  
  123.  
  124.     @Override
  125.     public int compareTo(Circle o) {
  126.         if(!this.equals(o)) return 1;
  127.         // TODO Auto-generated method stub
  128.         return 0;
  129.     }
  130.    
  131. }
  132.  
  133. class ViewCollection extends JScrollPane {
  134.    
  135.     private static final long serialVersionUID = 1L;
  136.         private TreeSet<Circle> list;
  137.         private JTable table;
  138.         private DefaultTableModel tableModel;
  139.        
  140.         public ViewCollection(TreeSet<Circle> list, int width, int height){
  141.             this.list = list;
  142.             setPreferredSize(new Dimension(width, height));
  143.             setBorder(BorderFactory.createTitledBorder("Lista okręgów"));
  144.            
  145.             String[] tableHeader = {"Nazwa", "X", "Y", "Średnica"};
  146.             tableModel = new DefaultTableModel(tableHeader, 0);
  147.             table = new JTable(tableModel) {
  148.                
  149.                 private static final long serialVersionUID = 1L;
  150.  
  151.                 @Override
  152.                 public boolean isCellEditable(int rowIndex, int colIndex) {
  153.                     return false;
  154.                 }
  155.             };
  156.             table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
  157.             table.setRowSelectionAllowed(true);
  158.             setViewportView(table);
  159.         }
  160.        
  161.         void refreshView(){
  162.             tableModel.setRowCount(0);
  163.             for (Circle circles : list) {
  164.                 if (circles != null) {
  165.                     String[] row = {""+circles.getName(), ""+circles.getX(), ""+circles.getY(),""+circles.getD()};
  166.                     tableModel.addRow(row);
  167.                 }
  168.             }
  169.         }
  170. }
  171.  
  172. class Rysunek extends JPanel implements  ActionListener, Runnable, MouseListener, KeyListener {
  173.  
  174.     private static final long serialVersionUID = 1L;
  175.    
  176.     TreeSet<Circle> circles = new TreeSet<>();
  177.     ViewCollection list = new ViewCollection(circles, 475, 100);
  178.    
  179.    
  180.     Circle circle;
  181.  
  182.  
  183.    
  184.     //int x = 0;
  185.    
  186.     //int mx, my, nmx, nmy;
  187.  
  188.    
  189.     public Rysunek() {
  190.  
  191.     }
  192.  
  193.     public void actionPerformed(ActionEvent evt) {
  194.  
  195.     }
  196.  
  197.     @Override
  198.     public void paintComponent(Graphics g)
  199.     {
  200.         super.paintComponent(g);
  201.        
  202.         for (Circle circle : circles)
  203.         {
  204.             circle.rysuj(g);
  205.         }
  206.        
  207.            
  208.     }
  209.  
  210.     @Override
  211.     public void run() {
  212.         // TODO Auto-generated method stub
  213.     }
  214.  
  215.     @Override
  216.     public void mouseClicked(MouseEvent e) {
  217.         // TODO Auto-generated method stub
  218.         circle = new Circle(getMousePosition().x, getMousePosition().y, new Random().nextInt(99)+1,JOptionPane.showInputDialog("Podaj nazwe:"));
  219.         circles.add(circle);
  220.         repaint();
  221.         list.refreshView();
  222.         requestFocus();
  223.     }
  224.  
  225.     @Override
  226.     public void mouseEntered(MouseEvent e) {
  227.         // TODO Auto-generated method stub
  228.        
  229.     }
  230.  
  231.     @Override
  232.     public void mouseExited(MouseEvent e) {
  233.         // TODO Auto-generated method stub
  234.        
  235.     }
  236.  
  237.     @Override
  238.     public void mousePressed(MouseEvent e) {
  239.        
  240.     }
  241.  
  242.     @Override
  243.     public void mouseReleased(MouseEvent e) {
  244.  
  245.     }
  246.    
  247.     public void delete() {
  248.         circles.removeAll(circles);
  249.         list.refreshView();
  250.         repaint();
  251.     }
  252.    
  253.     @Override
  254.     public void keyPressed(KeyEvent e) {
  255.        
  256.         int speed = 1;
  257.         if(e.isShiftDown()) speed = 10;
  258.        
  259.         for(Circle circle : circles)
  260.         {
  261.             switch(e.getKeyCode()) {
  262.            
  263.             case KeyEvent.VK_UP:
  264.                 circle.przesun(0, -speed);
  265.                 break;
  266.             case KeyEvent.VK_DOWN:
  267.                 circle.przesun(0, speed);
  268.                 break;
  269.             case KeyEvent.VK_LEFT:
  270.                 circle.przesun(-speed,0);
  271.                 break;
  272.             case KeyEvent.VK_RIGHT:
  273.                 circle.przesun(speed, 0);
  274.                 break;
  275.             case KeyEvent.VK_DELETE:
  276.                 delete();
  277.                 break;
  278.             default:
  279.                 break; 
  280.             }
  281.             repaint();
  282.             list.refreshView();
  283.         }
  284.         // TODO Auto-generated method stub
  285.     }
  286.  
  287.     @Override
  288.     public void keyReleased(KeyEvent e) {
  289.         // TODO Auto-generated method stub
  290.        
  291.     }
  292.  
  293.     @Override
  294.     public void keyTyped(KeyEvent e) {
  295.         // TODO Auto-generated method stub
  296.         if(e.getKeyChar()=='c')
  297.         {
  298.             circle = new Circle(new Random().nextInt(300)+100,new Random().nextInt(300)+100, new Random().nextInt(99)+1, JOptionPane.showInputDialog("Podaj nazwe:"));
  299.             circles.add(circle);
  300.             repaint();
  301.             list.refreshView();
  302.         }
  303.     }
  304. }
  305.  
  306.  
  307. public class Edytor extends JFrame implements KeyListener, MouseListener, MouseMotionListener, Runnable, ActionListener {
  308.  
  309.     private static final long serialVersionUID = 1L;
  310.  
  311.     private final String OPIS = "OPIS PROGRAMU\n\n" + "Aktywna klawisze:\n" + "   strzalki   ==> przesuwanie rysunku\n"
  312.             + "   k , K  ==> kasowanie rysunku\n" + "\nOperacje myszka:\n" + "   przeciaganie   ==>  rysowanie lini\n"
  313.             + "   SHIFT + przeciaganie   ==>  zakreślanie pola"
  314.             + "\nWIDAC ZE KOLO SIE PORUSZA NA EKRANIE TYLKO GDY RUSZA SIE MYSZKA";
  315.  
  316.         JMenuBar menuBar = new JMenuBar();
  317.         JMenu menuFile = new JMenu("Plik");
  318.         JMenuItem author = new JMenuItem("Autor");
  319.         JMenuItem about = new JMenuItem("O programie");
  320.         JMenuItem exitProgram = new JMenuItem("Zakoncz");
  321.        
  322.         JButton deleteButton = new JButton("Usun kolka");
  323.         JButton randCircle = new JButton("Dodaj losowe kolko");
  324.        
  325.         Rysunek panel = new Rysunek();
  326.        
  327.         public Edytor() {
  328.             super("Piotr Lasek");
  329.             setSize(500,500);
  330.             setDefaultCloseOperation(DISPOSE_ON_CLOSE);
  331.             setContentPane(panel);
  332.             setVisible(true);
  333.             panel.setFocusable(true);
  334.            
  335.             panel.add(deleteButton);
  336.             panel.add(randCircle);
  337.             panel.add(panel.list);
  338.            
  339.            
  340.             setJMenuBar(menuBar);
  341.             menuBar.add(menuFile);
  342.             menuFile.add(author);
  343.             menuFile.add(about);
  344.             menuFile.add(exitProgram);
  345.            
  346.             menuFile.addActionListener(this);
  347.             author.addActionListener(this);
  348.             exitProgram.addActionListener(this);
  349.             about.addActionListener(this);
  350.             deleteButton.addActionListener(this);
  351.             randCircle.addActionListener(this);
  352.             panel.addMouseListener(panel);
  353.             panel.addKeyListener(panel);
  354.             addMouseListener(this);
  355.             //panel.run();
  356.            
  357.            
  358.            
  359.         }
  360.    
  361.    
  362.     // ***obsługa zdarzeń przez słuchacza zdarzeń KeyListener ***
  363.         public void keyPressed(KeyEvent e) {
  364.            
  365.         }
  366.  
  367.         public void keyReleased(KeyEvent evt) {
  368.         }
  369.  
  370.         public void keyTyped(KeyEvent evt) {
  371.         }
  372.  
  373.         // ***obsługa zdarzeń przez słuchacza zdarzeń MouseListener
  374.         public void mouseClicked(MouseEvent e) {
  375.  
  376.         }
  377.  
  378.         public void mouseEntered(MouseEvent e) {
  379.            
  380.         }
  381.  
  382.         public void mouseExited(MouseEvent e) {
  383.         }
  384.  
  385.         public void mousePressed(MouseEvent e) {
  386.  
  387.         }
  388.  
  389.         public void mouseReleased(MouseEvent e) {
  390.         }
  391.  
  392.         // ***obsługa zdarzeń przez słuchacza zdarzeń MouseMotionListener***
  393.         public void mouseDragged(MouseEvent e) {
  394.            
  395.         }
  396.  
  397.         public void mouseMoved(MouseEvent e) {
  398.  
  399.         }
  400.  
  401.         // ***implementacja interfejsu Runnable***
  402.         @Override
  403.         public void run() {
  404.  
  405.  
  406.         }
  407.  
  408.         @Override
  409.         public void actionPerformed(ActionEvent e) {
  410.             Object source = e.getSource();
  411.            
  412.             if(source==exitProgram){
  413.                 System.exit(0);
  414.             }
  415.            
  416.             if(source==author)
  417.             {
  418.                 JOptionPane.showMessageDialog(this, "Piotr Łasek", "Autor",JOptionPane.INFORMATION_MESSAGE);
  419.             }
  420.            
  421.             if(source==about)
  422.             {
  423.                 JOptionPane.showMessageDialog(this, OPIS, "Opis", JOptionPane.INFORMATION_MESSAGE);
  424.             }
  425.            
  426.             if(source==randCircle)
  427.             {
  428.                 panel.circle = new Circle(new Random().nextInt(300)+100, new Random().nextInt(300)+100, new Random().nextInt(99)+1,JOptionPane.showInputDialog("Podaj nazwe:"));
  429.                 panel.circles.add(panel.circle);
  430.                 repaint();
  431.                 panel.list.refreshView();
  432.                 panel.requestFocus();
  433.             }
  434.            
  435.             if(source==deleteButton){
  436.                 panel.delete();
  437.             }
  438.            
  439.  
  440.         }
  441.        
  442.        
  443.  
  444.     public static void main(String[] args) {
  445.         //Rysunek rysunek = new Rysunek();
  446.         new Edytor();
  447.        
  448.         Drukarka drukarka = new Drukarka();
  449.         Producent producentJeden = new Producent(drukarka, "Piotr Lasek", 1);
  450.         Producent producentDwa = new Producent(drukarka, "Piotr Lasek",2);
  451.        
  452.         producentJeden.start();
  453.         producentDwa.start();
  454.  
  455.     }
  456.  
  457. }
  458.  
  459. class Drukarka {
  460.  
  461.     volatile int id = 0; // id Producenta, który ostatnio korzystał z drukarki
  462.     int nr = 0; // numer zadania (automatycznie incrementowany).
  463.  
  464. // Proszę zmodyfikować metodę drukuj zgodnie z wytycznymi do zadania 6.
  465.  
  466.     synchronized void drukuj(String tekst, int id)
  467.     {
  468.         if(this.id == id) {
  469.             try {
  470.                 wait();
  471.             }catch(InterruptedException e) {
  472.                 e.printStackTrace();
  473.             }
  474.         }
  475.         else {
  476.             System.out.println(nr++ + ":" + tekst + " " + id);
  477.             this.id = id;
  478.         }
  479.         notify();
  480.  
  481.     }
  482. } // koniec klasy Drukarka
  483.  
  484. class Producent extends Thread {   
  485.     Drukarka drukarka;
  486.     String tekst;
  487.     int id;
  488.  
  489.     public Producent(Drukarka drukarka, String tekst, int id) {
  490.         this.drukarka = drukarka;
  491.         this.tekst = tekst;
  492.         this.id = id;
  493.     }
  494.  
  495.     @Override
  496.     public void run() {
  497.         Random random = new Random();
  498.         while (true){
  499.             drukarka.drukuj(tekst, id);
  500.             try {
  501.                 sleep(500 + random.nextInt(3000));
  502.             } catch (InterruptedException e) { }
  503.         }
  504.     }  
  505.     } // koniec klasy Producent
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement