Advertisement
dar7777

Untitled

Nov 4th, 2019
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.84 KB | None | 0 0
  1. import java.awt.*;
  2. import java.awt.event.*;
  3.  
  4. // Основной класс приложения
  5. public class ParamBanner extends Panel{
  6.  DrawString drawStringThread = null;  // поток для рисования строк с аккордами
  7.  DrawBoll drawBollsThread = null;  // поток для рисования кружков
  8.  static boolean stopFlag;
  9.  Panel p1, p3, p4, p5, p6;
  10.  Canvas p2;
  11.  List list;
  12.  Label lb1, lb2, lb3;
  13.  Color colObject, col = Color.white;
  14.  Choice choice2;
  15.  Button b1, b2, b3;
  16.  boolean bolGuitar, bolEm, bolAm, bolDm, boldrawStr;
  17.  boolean animFlag;          // флаг останова анимации
  18.  boolean waitStringFlag;            // флаг ожидания потока вывода строк
  19.  int rw, rh ;
  20.  final static int MAX_RW = 20;
  21.  final static int MAX_RH = 20;
  22.  Graphics gc;  
  23.  
  24.  public ParamBanner() {
  25.   rw = MAX_RW; rh = MAX_RH;
  26.   setLayout(new GridLayout(1,2));
  27.    p1=new Panel();  //панель управления
  28.      p1.setLayout(new GridLayout(3,1));
  29.      p3=new Panel() ; //панель для выбора аккорда
  30.      p1.add(p3);     
  31.      p3.setBackground(Color.green);
  32.      lb1 = new Label("Выберите нужный аккорд:",Label.CENTER);
  33.         p3.add(lb1);
  34.         choice2 = new Choice();
  35.         choice2.add("Am");
  36.         choice2.add("Em");
  37.         choice2.add("Dm");
  38.         choice2.addItemListener(new ItemListener(){
  39.             public void itemStateChanged(ItemEvent ie){
  40.                 if(choice2.getSelectedItem().equals("Am")){
  41.                     bolAm = true;
  42.                     bolEm = false;
  43.                     bolDm = false;
  44.                 }
  45.                 if(choice2.getSelectedItem().equals("Em"))
  46.                    {
  47.                     bolAm = false;
  48.                     bolEm = true;
  49.                     bolDm = false;
  50.                 }
  51.                 if(choice2.getSelectedItem().equals("Dm"))
  52.                    {
  53.                     bolAm = false;
  54.                     bolEm = false;
  55.                     bolDm = true;
  56.                 }
  57.                 p2.repaint();
  58.             }
  59.         });  // регистрация блока прослушивания (приемника)
  60.         p3.add(choice2);
  61.      
  62.      p4=new Panel() ; //панель для ввода цвета грифа и фона
  63.      p1.add(p4);     
  64.      p4.setBackground(Color.green);
  65.      lb1 = new Label("Выберите цвет грифа и фона:",Label.CENTER); // ГРИФФОН
  66.      p4.add(lb1);
  67.      list = new List(4);
  68.      list.add("Красный");
  69.      list.add("Оранжевый");
  70.      list.add("Желтый");
  71.      list.add("Голубой");
  72.      list.add("Синий");
  73.      list.add("Розовый");
  74.      list.add("Светло-серый");
  75.      list.add("Белый");   
  76.      list.addItemListener(new ItemListener(){
  77.         public void itemStateChanged(ItemEvent ie){
  78.             if(list.getSelectedItem().equals("Красный"))
  79.                col = Color.red;
  80.             if(list.getSelectedItem().equals("Оранжевый"))
  81.                col = Color.orange;
  82.             if(list.getSelectedItem().equals("Желтый"))
  83.                col = Color.yellow;
  84.             if(list.getSelectedItem().equals("Голубой"))
  85.                col = Color.cyan;
  86.             if(list.getSelectedItem().equals("Синий"))
  87.                col = Color.blue;
  88.             if(list.getSelectedItem().equals("Розовый"))
  89.                col = Color.pink;
  90.             if(list.getSelectedItem().equals("Светло-серый"))
  91.                col = Color.lightGray;
  92.             if(list.getSelectedItem().equals("Белый"))
  93.                col = Color.white;
  94.             p2.repaint();
  95.         }
  96.     });  // регистрация блока прослушивания (приемника)
  97.         p4.add(list);
  98.  
  99.      p5=new Panel() ; //панель с кнопками
  100.      p5.setLayout(new BorderLayout());
  101.      p1.add(p5);     
  102.      p5.setBackground(Color.green);
  103.      b3 = new Button("Запустить");
  104.          p5.add(b3, BorderLayout.NORTH);
  105.          b3.addActionListener(new ActionListener(){
  106.             public void actionPerformed(ActionEvent e){
  107.                 if(b3.getActionCommand().equals("Запустить"))
  108.                     start();
  109.             }
  110.         });
  111.      b2 = new Button("Остановить");
  112.      p5.add(b2,BorderLayout.SOUTH);
  113.      b2.addActionListener(new ActionListener(){
  114.         public void actionPerformed(ActionEvent e){
  115.             if(b2.getActionCommand().equals("Остановить"))
  116.                 stop();
  117.         }
  118.     });
  119.     b1 = new Button("Добавить гриф гитары");
  120.         p5.add(b1, BorderLayout.CENTER);
  121.         b1.addActionListener(new ActionListener(){
  122.         public void actionPerformed(ActionEvent e){
  123.             if(b1.getActionCommand().equals("Добавить гриф гитары"))
  124.                 bolGuitar = true;
  125.                 p2.repaint();
  126.                 b1.setEnabled(false);
  127.         }
  128.     });
  129.     add(p1);
  130.    
  131.     p2 = new Canvas(){
  132.         public void paint(Graphics g)
  133.         {
  134.             Graphics2D g2d = (Graphics2D)g;
  135.             //g.setColor(colObject);
  136.             p2.setBackground(col);
  137.             if(bolGuitar){
  138.                 g2d.setStroke(new BasicStroke(4.0f));  // толщина
  139.                 g2d.drawRect(10, 50, 200, 400); //корпус гитары
  140.                 g.drawLine(10,120,210,120); // ладовые порожки
  141.                 g.drawLine(10,190,210,190);
  142.                 g.drawLine(10,260,210,260);
  143.                 g.drawLine(10,330,210,330);
  144.                 g.drawLine(10,400,210,400);
  145.                 g2d.setStroke(new BasicStroke(2.0f));
  146.                 g.drawLine(38,50,38,450);   // 6 - 4 струны
  147.                 g.drawLine(66,50,66,450);
  148.                 g.drawLine(95,50,95,450);
  149.                 g2d.setStroke(new BasicStroke(1.0f));
  150.                 g.drawLine(124,50,124,450); // 3 - 1 струны
  151.                 g.drawLine(152,50,152,450);
  152.                 g.drawLine(180,50,180,450);
  153.             }
  154.         }
  155.     };
  156.   add(p2);
  157. }
  158.  
  159. public void start()
  160.  {
  161.   gc = getGraphics();
  162.   animFlag = true;
  163.   waitStringFlag = true;
  164.  
  165.   drawStringThread = new DrawString();
  166.   drawStringThread.start();
  167.   drawBollsThread = new DrawBoll();
  168.   drawBollsThread.start();
  169.  }
  170.  
  171.  public void stop()
  172.  {
  173.   animFlag = false;
  174. // Оповещение ожидающего потока
  175.    if (waitStringFlag)
  176.     synchronized (drawStringThread)
  177.     {
  178.      waitStringFlag = false;
  179.      drawStringThread.notify();
  180.     }  
  181.      drawStringThread = null;
  182.      drawBollsThread = null;
  183.  }
  184.  
  185.  // Внутренний класс потока для рисования строк
  186.  class DrawString extends Thread
  187. {
  188.  public void run()
  189.  {
  190.   while(animFlag)
  191.   {
  192.     if(bolEm)
  193.         gc.drawString("Аккорд Em", 10, 5);
  194.     else if(bolAm)
  195.         gc.drawString("Аккорд Am", 10, 5);
  196.     else if(bolDm)
  197.         gc.drawString("Аккорд Dm", 10, 5);
  198.     boldrawStr = false;
  199.     System.out.println("str");  // вывод сообщения на консоль
  200.      synchronized (this)
  201.      {
  202.       try {// Если флаг ожидания потока drawStringThread установлен,
  203.            // поток переходит в состояние ожидания, пока другой поток
  204.            // drawBollsThread, сбросив флаг, не вызовет метод notify()
  205.        while (waitStringFlag)
  206.              wait();
  207.       } catch(InterruptedException e) {}
  208.      waitStringFlag = true; // после выхода из состояния ожидания
  209.                 // снова устанавливается флаг
  210.      }
  211.   }
  212.  }
  213. }
  214. // Внутренний класс потока для рисования кружков
  215. class DrawBoll extends Thread
  216. {
  217.  public void run()
  218.  {
  219.   while(animFlag)
  220.   {
  221.     try {
  222.      Thread.sleep(300);     // приостановка работы потока
  223.     } catch(InterruptedException e) {}
  224.     // Отображение кружков на ладах
  225.     if(bolEm){
  226.                 gc.drawOval(85, 145, rw, rh);
  227.                 gc.fillOval(85, 145, rw, rh);
  228.                
  229.                 gc.drawOval(56, 145, rw, rh);
  230.                 gc.fillOval(56, 145, rw, rh);
  231.                 boldrawStr = true;
  232.             }else if(bolAm){
  233.                 gc.drawOval(142, 75, rw, rh);
  234.                 gc.fillOval(142, 75, rw, rh);
  235.                
  236.                 gc.drawOval(85, 145, rw, rh);
  237.                 gc.fillOval(85, 145, rw, rh);
  238.                
  239.                 gc.drawOval(114,145 , rw, rh);
  240.                 gc.fillOval(114, 145, rw, rh);
  241.                 boldrawStr = true;
  242.             }else if(bolDm){
  243.                 gc.drawOval(170, 75, rw, rh);
  244.                 gc.fillOval(170, 75, rw, rh);
  245.                
  246.                 gc.drawOval(114,145 , rw, rh);
  247.                 gc.fillOval(114, 145, rw, rh);
  248.                
  249.                 gc.drawOval(142, 215, rw, rh);
  250.                 gc.fillOval(142, 215, rw, rh);
  251.                 boldrawStr = true;
  252.             }
  253.             p2.repaint();
  254.     System.out.println("balls");    // вывод сообщения на консоль
  255.  
  256.     if (drawStringThread != null && boldrawStr == true)
  257.     synchronized (drawStringThread)
  258.     {
  259.      waitStringFlag = false;    // сбрасывается флаг ожидания
  260.      // поток drawStringThread оповещается о необходимости выхода из состояния ожидания
  261.      drawStringThread.notify();
  262.     }
  263.   }
  264.  }
  265. }
  266.  
  267.  public static void main(String args[]) {
  268.   ParamBanner canvas = new ParamBanner();  
  269.   Frame frame = new Frame("An AWT-Based Application"); 
  270.   frame.add(canvas);
  271.   frame.setSize(450, 475);
  272.   frame.setLocation(100, 100);
  273.   frame.setVisible(true);
  274.   frame.addWindowListener(new WindowAdapter(){
  275.        public void windowIconified(WindowEvent e){
  276.           stopFlag = true;
  277.           System.out.println("Thread is terminated");
  278.        }
  279.         public void windowClosing(WindowEvent e){
  280.           System.exit(0);
  281.        }
  282.   });
  283.  }
  284. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement