Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.awt.*;
- import java.awt.event.*;
- // Основной класс приложения
- public class ParamBanner extends Panel{
- DrawString drawStringThread = null; // поток для рисования строк с аккордами
- DrawBoll drawBollsThread = null; // поток для рисования кружков
- static boolean stopFlag;
- Panel p1, p3, p4, p5, p6;
- Canvas p2;
- List list;
- Label lb1, lb2, lb3;
- Color colObject, col = Color.white;
- Choice choice2;
- Button b1, b2, b3;
- boolean bolGuitar, bolEm, bolAm, bolDm, boldrawStr;
- boolean animFlag; // флаг останова анимации
- boolean waitStringFlag; // флаг ожидания потока вывода строк
- int rw, rh ;
- final static int MAX_RW = 20;
- final static int MAX_RH = 20;
- Graphics gc;
- public ParamBanner() {
- rw = MAX_RW; rh = MAX_RH;
- setLayout(new GridLayout(1,2));
- p1=new Panel(); //панель управления
- p1.setLayout(new GridLayout(3,1));
- p3=new Panel() ; //панель для выбора аккорда
- p1.add(p3);
- p3.setBackground(Color.green);
- lb1 = new Label("Выберите нужный аккорд:",Label.CENTER);
- p3.add(lb1);
- choice2 = new Choice();
- choice2.add("Am");
- choice2.add("Em");
- choice2.add("Dm");
- choice2.addItemListener(new ItemListener(){
- public void itemStateChanged(ItemEvent ie){
- if(choice2.getSelectedItem().equals("Am")){
- bolAm = true;
- bolEm = false;
- bolDm = false;
- }
- if(choice2.getSelectedItem().equals("Em"))
- {
- bolAm = false;
- bolEm = true;
- bolDm = false;
- }
- if(choice2.getSelectedItem().equals("Dm"))
- {
- bolAm = false;
- bolEm = false;
- bolDm = true;
- }
- p2.repaint();
- }
- }); // регистрация блока прослушивания (приемника)
- p3.add(choice2);
- p4=new Panel() ; //панель для ввода цвета грифа и фона
- p1.add(p4);
- p4.setBackground(Color.green);
- lb1 = new Label("Выберите цвет грифа и фона:",Label.CENTER); // ГРИФФОН
- p4.add(lb1);
- list = new List(4);
- list.add("Красный");
- list.add("Оранжевый");
- list.add("Желтый");
- list.add("Голубой");
- list.add("Синий");
- list.add("Розовый");
- list.add("Светло-серый");
- list.add("Белый");
- list.addItemListener(new ItemListener(){
- public void itemStateChanged(ItemEvent ie){
- if(list.getSelectedItem().equals("Красный"))
- col = Color.red;
- if(list.getSelectedItem().equals("Оранжевый"))
- col = Color.orange;
- if(list.getSelectedItem().equals("Желтый"))
- col = Color.yellow;
- if(list.getSelectedItem().equals("Голубой"))
- col = Color.cyan;
- if(list.getSelectedItem().equals("Синий"))
- col = Color.blue;
- if(list.getSelectedItem().equals("Розовый"))
- col = Color.pink;
- if(list.getSelectedItem().equals("Светло-серый"))
- col = Color.lightGray;
- if(list.getSelectedItem().equals("Белый"))
- col = Color.white;
- p2.repaint();
- }
- }); // регистрация блока прослушивания (приемника)
- p4.add(list);
- p5=new Panel() ; //панель с кнопками
- p5.setLayout(new BorderLayout());
- p1.add(p5);
- p5.setBackground(Color.green);
- b3 = new Button("Запустить");
- p5.add(b3, BorderLayout.NORTH);
- b3.addActionListener(new ActionListener(){
- public void actionPerformed(ActionEvent e){
- if(b3.getActionCommand().equals("Запустить"))
- start();
- }
- });
- b2 = new Button("Остановить");
- p5.add(b2,BorderLayout.SOUTH);
- b2.addActionListener(new ActionListener(){
- public void actionPerformed(ActionEvent e){
- if(b2.getActionCommand().equals("Остановить"))
- stop();
- }
- });
- b1 = new Button("Добавить гриф гитары");
- p5.add(b1, BorderLayout.CENTER);
- b1.addActionListener(new ActionListener(){
- public void actionPerformed(ActionEvent e){
- if(b1.getActionCommand().equals("Добавить гриф гитары"))
- bolGuitar = true;
- p2.repaint();
- b1.setEnabled(false);
- }
- });
- add(p1);
- p2 = new Canvas(){
- public void paint(Graphics g)
- {
- Graphics2D g2d = (Graphics2D)g;
- //g.setColor(colObject);
- p2.setBackground(col);
- if(bolGuitar){
- g2d.setStroke(new BasicStroke(4.0f)); // толщина
- g2d.drawRect(10, 50, 200, 400); //корпус гитары
- g.drawLine(10,120,210,120); // ладовые порожки
- g.drawLine(10,190,210,190);
- g.drawLine(10,260,210,260);
- g.drawLine(10,330,210,330);
- g.drawLine(10,400,210,400);
- g2d.setStroke(new BasicStroke(2.0f));
- g.drawLine(38,50,38,450); // 6 - 4 струны
- g.drawLine(66,50,66,450);
- g.drawLine(95,50,95,450);
- g2d.setStroke(new BasicStroke(1.0f));
- g.drawLine(124,50,124,450); // 3 - 1 струны
- g.drawLine(152,50,152,450);
- g.drawLine(180,50,180,450);
- }
- }
- };
- add(p2);
- }
- public void start()
- {
- gc = getGraphics();
- animFlag = true;
- waitStringFlag = true;
- drawStringThread = new DrawString();
- drawStringThread.start();
- drawBollsThread = new DrawBoll();
- drawBollsThread.start();
- }
- public void stop()
- {
- animFlag = false;
- // Оповещение ожидающего потока
- if (waitStringFlag)
- synchronized (drawStringThread)
- {
- waitStringFlag = false;
- drawStringThread.notify();
- }
- drawStringThread = null;
- drawBollsThread = null;
- }
- // Внутренний класс потока для рисования строк
- class DrawString extends Thread
- {
- public void run()
- {
- while(animFlag)
- {
- if(bolEm)
- gc.drawString("Аккорд Em", 10, 5);
- else if(bolAm)
- gc.drawString("Аккорд Am", 10, 5);
- else if(bolDm)
- gc.drawString("Аккорд Dm", 10, 5);
- boldrawStr = false;
- System.out.println("str"); // вывод сообщения на консоль
- synchronized (this)
- {
- try {// Если флаг ожидания потока drawStringThread установлен,
- // поток переходит в состояние ожидания, пока другой поток
- // drawBollsThread, сбросив флаг, не вызовет метод notify()
- while (waitStringFlag)
- wait();
- } catch(InterruptedException e) {}
- waitStringFlag = true; // после выхода из состояния ожидания
- // снова устанавливается флаг
- }
- }
- }
- }
- // Внутренний класс потока для рисования кружков
- class DrawBoll extends Thread
- {
- public void run()
- {
- while(animFlag)
- {
- try {
- Thread.sleep(300); // приостановка работы потока
- } catch(InterruptedException e) {}
- // Отображение кружков на ладах
- if(bolEm){
- gc.drawOval(85, 145, rw, rh);
- gc.fillOval(85, 145, rw, rh);
- gc.drawOval(56, 145, rw, rh);
- gc.fillOval(56, 145, rw, rh);
- boldrawStr = true;
- }else if(bolAm){
- gc.drawOval(142, 75, rw, rh);
- gc.fillOval(142, 75, rw, rh);
- gc.drawOval(85, 145, rw, rh);
- gc.fillOval(85, 145, rw, rh);
- gc.drawOval(114,145 , rw, rh);
- gc.fillOval(114, 145, rw, rh);
- boldrawStr = true;
- }else if(bolDm){
- gc.drawOval(170, 75, rw, rh);
- gc.fillOval(170, 75, rw, rh);
- gc.drawOval(114,145 , rw, rh);
- gc.fillOval(114, 145, rw, rh);
- gc.drawOval(142, 215, rw, rh);
- gc.fillOval(142, 215, rw, rh);
- boldrawStr = true;
- }
- p2.repaint();
- System.out.println("balls"); // вывод сообщения на консоль
- if (drawStringThread != null && boldrawStr == true)
- synchronized (drawStringThread)
- {
- waitStringFlag = false; // сбрасывается флаг ожидания
- // поток drawStringThread оповещается о необходимости выхода из состояния ожидания
- drawStringThread.notify();
- }
- }
- }
- }
- public static void main(String args[]) {
- ParamBanner canvas = new ParamBanner();
- Frame frame = new Frame("An AWT-Based Application");
- frame.add(canvas);
- frame.setSize(450, 475);
- frame.setLocation(100, 100);
- frame.setVisible(true);
- frame.addWindowListener(new WindowAdapter(){
- public void windowIconified(WindowEvent e){
- stopFlag = true;
- System.out.println("Thread is terminated");
- }
- public void windowClosing(WindowEvent e){
- System.exit(0);
- }
- });
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement