Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import javax.swing.*;
- import javax.swing.table.DefaultTableModel;
- import java.awt.*;
- import java.awt.event.*;
- import java.util.*;
- /*======= TU PROSZE SIE PODPISAC ==============================
- * Imie: Piotr
- * Nazwisko: Lasek
- *Nr indeksu: 235690
- *==============================================================
- */
- class Circle implements Comparable<Circle>{
- private int x, y, d;
- private String name = "name";
- @Override
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + d;
- result = prime * result + x;
- result = prime * result + y;
- return result;
- }
- @Override
- public boolean equals(Object obj) {
- if (this == obj)
- return true;
- if (obj == null)
- return false;
- if (getClass() != obj.getClass())
- return false;
- Circle other = (Circle) obj;
- if (d != other.d)
- return false;
- if (x != other.x)
- return false;
- if (y != other.y)
- return false;
- return true;
- }
- public Circle(int cx, int cy, int cd) {
- x = cx - cd/2;
- y = cy - cd/2;
- d = cd;
- name = "" + "(" + x + ", " + y + ", " + d + ")";
- // TODO Auto-generated constructor stub
- }
- public Circle(int cx, int cy, int cd, String name) {
- x = cx - cd/2;
- y = cy - cd/2;
- d = cd;
- this.name = name;
- }
- public void przesun(int cx, int cy)
- {
- x+=cx;
- y+=cy;
- }
- public void rysuj(Graphics g)
- {
- g.fillOval(x, y, d, d);
- }
- public int getX() {
- return x;
- }
- public void setX(int x) {
- this.x = x;
- }
- public int getY() {
- return y;
- }
- public void setY(int y) {
- this.y = y;
- }
- public int getD() {
- return d;
- }
- public void setD(int d) {
- this.d = d;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- @Override
- public int compareTo(Circle o) {
- if(!this.equals(o)) return 1;
- // TODO Auto-generated method stub
- return 0;
- }
- }
- class ViewCollection extends JScrollPane {
- private static final long serialVersionUID = 1L;
- private TreeSet<Circle> list;
- private JTable table;
- private DefaultTableModel tableModel;
- public ViewCollection(TreeSet<Circle> list, int width, int height){
- this.list = list;
- setPreferredSize(new Dimension(width, height));
- setBorder(BorderFactory.createTitledBorder("Lista okręgów"));
- String[] tableHeader = {"Nazwa", "X", "Y", "Średnica"};
- tableModel = new DefaultTableModel(tableHeader, 0);
- table = new JTable(tableModel) {
- private static final long serialVersionUID = 1L;
- @Override
- public boolean isCellEditable(int rowIndex, int colIndex) {
- return false;
- }
- };
- table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
- table.setRowSelectionAllowed(true);
- setViewportView(table);
- }
- void refreshView(){
- tableModel.setRowCount(0);
- for (Circle circles : list) {
- if (circles != null) {
- String[] row = {""+circles.getName(), ""+circles.getX(), ""+circles.getY(),""+circles.getD()};
- tableModel.addRow(row);
- }
- }
- }
- }
- class Rysunek extends JPanel implements ActionListener, Runnable, MouseListener, KeyListener {
- private static final long serialVersionUID = 1L;
- TreeSet<Circle> circles = new TreeSet<>();
- ViewCollection list = new ViewCollection(circles, 475, 100);
- Circle circle;
- //int x = 0;
- //int mx, my, nmx, nmy;
- public Rysunek() {
- }
- public void actionPerformed(ActionEvent evt) {
- }
- @Override
- public void paintComponent(Graphics g)
- {
- super.paintComponent(g);
- for (Circle circle : circles)
- {
- circle.rysuj(g);
- }
- }
- @Override
- public void run() {
- // TODO Auto-generated method stub
- }
- @Override
- public void mouseClicked(MouseEvent e) {
- // TODO Auto-generated method stub
- circle = new Circle(getMousePosition().x, getMousePosition().y, new Random().nextInt(99)+1,JOptionPane.showInputDialog("Podaj nazwe:"));
- circles.add(circle);
- repaint();
- list.refreshView();
- requestFocus();
- }
- @Override
- public void mouseEntered(MouseEvent e) {
- // TODO Auto-generated method stub
- }
- @Override
- public void mouseExited(MouseEvent e) {
- // TODO Auto-generated method stub
- }
- @Override
- public void mousePressed(MouseEvent e) {
- }
- @Override
- public void mouseReleased(MouseEvent e) {
- }
- public void delete() {
- circles.removeAll(circles);
- list.refreshView();
- repaint();
- }
- @Override
- public void keyPressed(KeyEvent e) {
- int speed = 1;
- if(e.isShiftDown()) speed = 10;
- for(Circle circle : circles)
- {
- switch(e.getKeyCode()) {
- case KeyEvent.VK_UP:
- circle.przesun(0, -speed);
- break;
- case KeyEvent.VK_DOWN:
- circle.przesun(0, speed);
- break;
- case KeyEvent.VK_LEFT:
- circle.przesun(-speed,0);
- break;
- case KeyEvent.VK_RIGHT:
- circle.przesun(speed, 0);
- break;
- case KeyEvent.VK_DELETE:
- delete();
- break;
- default:
- break;
- }
- repaint();
- list.refreshView();
- }
- // TODO Auto-generated method stub
- }
- @Override
- public void keyReleased(KeyEvent e) {
- // TODO Auto-generated method stub
- }
- @Override
- public void keyTyped(KeyEvent e) {
- // TODO Auto-generated method stub
- if(e.getKeyChar()=='c')
- {
- circle = new Circle(new Random().nextInt(300)+100,new Random().nextInt(300)+100, new Random().nextInt(99)+1, JOptionPane.showInputDialog("Podaj nazwe:"));
- circles.add(circle);
- repaint();
- list.refreshView();
- }
- }
- }
- public class Edytor extends JFrame implements KeyListener, MouseListener, MouseMotionListener, Runnable, ActionListener {
- private static final long serialVersionUID = 1L;
- private final String OPIS = "OPIS PROGRAMU\n\n" + "Aktywna klawisze:\n" + " strzalki ==> przesuwanie rysunku\n"
- + " k , K ==> kasowanie rysunku\n" + "\nOperacje myszka:\n" + " przeciaganie ==> rysowanie lini\n"
- + " SHIFT + przeciaganie ==> zakreślanie pola"
- + "\nWIDAC ZE KOLO SIE PORUSZA NA EKRANIE TYLKO GDY RUSZA SIE MYSZKA";
- JMenuBar menuBar = new JMenuBar();
- JMenu menuFile = new JMenu("Plik");
- JMenuItem author = new JMenuItem("Autor");
- JMenuItem about = new JMenuItem("O programie");
- JMenuItem exitProgram = new JMenuItem("Zakoncz");
- JButton deleteButton = new JButton("Usun kolka");
- JButton randCircle = new JButton("Dodaj losowe kolko");
- Rysunek panel = new Rysunek();
- public Edytor() {
- super("Piotr Lasek");
- setSize(500,500);
- setDefaultCloseOperation(DISPOSE_ON_CLOSE);
- setContentPane(panel);
- setVisible(true);
- panel.setFocusable(true);
- panel.add(deleteButton);
- panel.add(randCircle);
- panel.add(panel.list);
- setJMenuBar(menuBar);
- menuBar.add(menuFile);
- menuFile.add(author);
- menuFile.add(about);
- menuFile.add(exitProgram);
- menuFile.addActionListener(this);
- author.addActionListener(this);
- exitProgram.addActionListener(this);
- about.addActionListener(this);
- deleteButton.addActionListener(this);
- randCircle.addActionListener(this);
- panel.addMouseListener(panel);
- panel.addKeyListener(panel);
- addMouseListener(this);
- //panel.run();
- }
- // ***obsługa zdarzeń przez słuchacza zdarzeń KeyListener ***
- public void keyPressed(KeyEvent e) {
- }
- public void keyReleased(KeyEvent evt) {
- }
- public void keyTyped(KeyEvent evt) {
- }
- // ***obsługa zdarzeń przez słuchacza zdarzeń MouseListener
- public void mouseClicked(MouseEvent e) {
- }
- public void mouseEntered(MouseEvent e) {
- }
- public void mouseExited(MouseEvent e) {
- }
- public void mousePressed(MouseEvent e) {
- }
- public void mouseReleased(MouseEvent e) {
- }
- // ***obsługa zdarzeń przez słuchacza zdarzeń MouseMotionListener***
- public void mouseDragged(MouseEvent e) {
- }
- public void mouseMoved(MouseEvent e) {
- }
- // ***implementacja interfejsu Runnable***
- @Override
- public void run() {
- }
- @Override
- public void actionPerformed(ActionEvent e) {
- Object source = e.getSource();
- if(source==exitProgram){
- System.exit(0);
- }
- if(source==author)
- {
- JOptionPane.showMessageDialog(this, "Piotr Łasek", "Autor",JOptionPane.INFORMATION_MESSAGE);
- }
- if(source==about)
- {
- JOptionPane.showMessageDialog(this, OPIS, "Opis", JOptionPane.INFORMATION_MESSAGE);
- }
- if(source==randCircle)
- {
- panel.circle = new Circle(new Random().nextInt(300)+100, new Random().nextInt(300)+100, new Random().nextInt(99)+1,JOptionPane.showInputDialog("Podaj nazwe:"));
- panel.circles.add(panel.circle);
- repaint();
- panel.list.refreshView();
- panel.requestFocus();
- }
- if(source==deleteButton){
- panel.delete();
- }
- }
- public static void main(String[] args) {
- //Rysunek rysunek = new Rysunek();
- new Edytor();
- Drukarka drukarka = new Drukarka();
- Producent producentJeden = new Producent(drukarka, "Piotr Lasek", 1);
- Producent producentDwa = new Producent(drukarka, "Piotr Lasek",2);
- producentJeden.start();
- producentDwa.start();
- }
- }
- class Drukarka {
- volatile int id = 0; // id Producenta, który ostatnio korzystał z drukarki
- int nr = 0; // numer zadania (automatycznie incrementowany).
- // Proszę zmodyfikować metodę drukuj zgodnie z wytycznymi do zadania 6.
- synchronized void drukuj(String tekst, int id)
- {
- if(this.id == id) {
- try {
- wait();
- }catch(InterruptedException e) {
- e.printStackTrace();
- }
- }
- else {
- System.out.println(nr++ + ":" + tekst + " " + id);
- this.id = id;
- }
- notify();
- }
- } // koniec klasy Drukarka
- class Producent extends Thread {
- Drukarka drukarka;
- String tekst;
- int id;
- public Producent(Drukarka drukarka, String tekst, int id) {
- this.drukarka = drukarka;
- this.tekst = tekst;
- this.id = id;
- }
- @Override
- public void run() {
- Random random = new Random();
- while (true){
- drukarka.drukuj(tekst, id);
- try {
- sleep(500 + random.nextInt(3000));
- } catch (InterruptedException e) { }
- }
- }
- } // koniec klasy Producent
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement