Легкая программа показывает в менюшке непонятный артефакт - Java

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Ниже работающий код. Однако при исполнении программы почему то отображается "будто бы вторая строка меню".
Листинг программы
  1. import javax.sound.midi.*;
  2. import javax.swing.*;
  3. import java.awt.*;
  4. import java.awt.event.ActionEvent;
  5. import java.awt.event.ActionListener;
  6. import static javax.sound.midi.Sequence.PPQ;
  7. public class JHF_TESTS_MMP3_412 {
  8. static JFrame jFrame;
  9. static int eventsCounter=0;
  10. static MyDrawingPanel myDrawingPanel;
  11. static ContinuePlaying continuePlaying;
  12. static StopPlaying stopPlaying;
  13. Sequencer sequencer;
  14.  
  15. public static void main(String[] args) throws Exception {
  16. JHF_TESTS_MMP3_412 jhf_tests_mmp3_412 = new JHF_TESTS_MMP3_412();
  17. jhf_tests_mmp3_412.GStart();
  18. }
  19. public void setGUI() {
  20. myDrawingPanel = new MyDrawingPanel();
  21. continuePlaying = new ContinuePlaying();
  22. stopPlaying = new StopPlaying();
  23. jFrame = new JFrame("MMP3");
  24. JMenuBar MP3menuBar = new JMenuBar();
  25. JMenu MP3menu = new JMenu("Player");
  26. JMenuItem Play = new JMenuItem("Play");
  27. JMenuItem Stop = new JMenuItem("Pause");
  28. Play.addActionListener(continuePlaying);
  29. Stop.addActionListener(stopPlaying);
  30. MP3menu.add(Play);
  31. MP3menu.add(Stop);
  32. MP3menuBar.add(MP3menu);
  33. jFrame.setJMenuBar(MP3menuBar);
  34. jFrame.getContentPane().add(BorderLayout.CENTER,myDrawingPanel);
  35. jFrame.setDefaultCloseOperation(jFrame.EXIT_ON_CLOSE);
  36. jFrame.setSize(1920, 1080);
  37. jFrame.setVisible(true);
  38. }
  39.  
  40. public void GStart() throws Exception{
  41. setGUI();
  42. sequencer = MidiSystem.getSequencer();
  43. sequencer.open();
  44. int[] arraytt = {127};
  45. sequencer.addControllerEventListener(myDrawingPanel,arraytt);
  46. Sequence sequence = new Sequence(PPQ,4);
  47. Track track = sequence.createTrack(); //Track track = new Sequence(PPQ,4).createTrack();
  48. for (long i = 1; i < 6500; i+=4) {
  49. track.add(newSingleMidiEvent(192,1,18,0,1));
  50. track.add(newSingleMidiEvent(144, 1, NotesrandomNumber(), 100, i));
  51. track.add(newSingleMidiEvent(176, 1, 127, 0, i));
  52. track.add(newSingleMidiEvent(128, 1, NotesrandomNumber(), 100, i + 2));
  53. }
  54. sequencer.setSequence(sequence);
  55. sequencer.setTempoInBPM(333);
  56. sequencer.start();
  57.  
  58. Thread.sleep(100);
  59. System.out.println("eventsCounter: " + eventsCounter + "; arraytt: " + arraytt[0]);
  60. }
  61. public MidiEvent newSingleMidiEvent(int mv1, int mv2, int mv3, int mv4, long mv5) throws Exception {
  62. MidiEvent midiEvent = new MidiEvent(new ShortMessage(mv1, mv2, mv3, mv4), mv5);
  63. return midiEvent;
  64. }
  65. public int NotesrandomNumber() {
  66. int intrandom = (int) (Math.random()*65);
  67. return intrandom;
  68. }
  69. class MyDrawingPanel extends JPanel implements ControllerEventListener {
  70. boolean EventTestMark;
  71. public void controlChange(ShortMessage event){
  72. EventTestMark = true;
  73. myDrawingPanel.repaint();
  74. }
  75. public int dotsRandomNumberX() {
  76. int intrandomXandX = (int) (Math.random()*1820);
  77. return intrandomXandX;
  78. }
  79. public int dotsRandomNumberY() {
  80. int intrandomXandY = (int) (Math.random()*980);
  81. return intrandomXandY;
  82. }
  83. public Color colorsRandom() {
  84. int red = (int) (Math.random()*255);
  85. int green = (int) (Math.random()*255);
  86. int blue = (int) (Math.random()*255);
  87. Color randomColor = new Color(red,green,blue);
  88. return randomColor;
  89. }
  90. public void paint(Graphics g){
  91. if(EventTestMark==true) {
  92. eventsCounter++;
  93. g.setColor(colorsRandom());
  94. g.fillRect(dotsRandomNumberX(), dotsRandomNumberY(), 23+dotsRandomNumberX()/14, 23+ dotsRandomNumberY()/14);
  95. EventTestMark = false;
  96. }
  97. }
  98. }
  99. public class StopPlaying implements ActionListener{
  100. public void actionPerformed(ActionEvent actionEvent){
  101. sequencer.stop();
  102. }
  103. }
  104. public class ContinuePlaying implements ActionListener{
  105. public void actionPerformed(ActionEvent actionEvent){
  106. sequencer.start();
  107. sequencer.setTempoInBPM(333);
  108. }
  109. }
  110. }
Фото приложено

Решение задачи: «Легкая программа показывает в менюшке непонятный артефакт»

textual
Листинг программы
  1. import javax.sound.midi.*;
  2. import javax.swing.*;
  3. import java.awt.*;
  4. import java.awt.event.ActionEvent;
  5. import java.awt.event.ActionListener;
  6. import java.util.*;
  7. import java.util.List;
  8.  
  9. import static javax.sound.midi.Sequence.PPQ;
  10.  
  11. public class untitled {
  12.     static JFrame jFrame;
  13.     static int eventsCounter = 0;
  14.     static MyDrawingPanel myDrawingPanel;
  15.     static ContinuePlaying continuePlaying;
  16.     static StopPlaying stopPlaying;
  17.     Sequencer sequencer;
  18.     public static void main(String[] args) throws Exception {
  19.         untitled untitled = new untitled();
  20.         untitled.GStart();
  21.     }
  22.     public void setGUI() {
  23.         myDrawingPanel = new MyDrawingPanel();
  24.         continuePlaying = new ContinuePlaying();
  25.         stopPlaying = new StopPlaying();
  26.         jFrame = new JFrame("MMP3");
  27.         JMenuBar MP3menuBar = new JMenuBar();
  28.         JMenu MP3menu = new JMenu("Player");
  29.         JMenuItem Play = new JMenuItem("Play");
  30.         JMenuItem Stop = new JMenuItem("Pause");
  31.         Play.addActionListener(continuePlaying);
  32.         Stop.addActionListener(stopPlaying);
  33.         MP3menu.add(Play);
  34.         MP3menu.add(Stop);
  35.         MP3menuBar.add(MP3menu);
  36.         jFrame.setJMenuBar(MP3menuBar);
  37.         jFrame.getContentPane().add(BorderLayout.CENTER, myDrawingPanel);
  38.         jFrame.setDefaultCloseOperation(jFrame.EXIT_ON_CLOSE);
  39.         jFrame.setSize(1920, 1080);
  40.         jFrame.setVisible(true);
  41.     }
  42.     public void GStart() throws Exception {
  43.         setGUI();
  44.         sequencer = MidiSystem.getSequencer();
  45.         sequencer.open();
  46.         int[] arraytt = {127};
  47.         sequencer.addControllerEventListener(myDrawingPanel, arraytt);
  48.         Sequence sequence = new Sequence(PPQ, 4);
  49.         Track track = sequence.createTrack(); //Track track = new Sequence(PPQ,4).createTrack();
  50.         for (long i = 1; i < 6500; i += 4) {
  51.             track.add(newSingleMidiEvent(192, 1, 18, 0, 1));
  52.             track.add(newSingleMidiEvent(144, 1, NotesrandomNumber(), 100, i));
  53.             track.add(newSingleMidiEvent(176, 1, 127, 0, i));
  54.             track.add(newSingleMidiEvent(128, 1, NotesrandomNumber(), 100, i + 2));
  55.         }
  56.         sequencer.setSequence(sequence);
  57.         sequencer.setTempoInBPM(333);
  58.         sequencer.start();
  59.         Thread.sleep(100);
  60.         System.out.println("eventsCounter: " + eventsCounter + "; arraytt: " + arraytt[0]);
  61.     }
  62.     public MidiEvent newSingleMidiEvent(int mv1, int mv2, int mv3, int mv4, long mv5) throws Exception {
  63.         MidiEvent midiEvent = new MidiEvent(new ShortMessage(mv1, mv2, mv3, mv4), mv5);
  64.         return midiEvent;
  65.     }
  66.     public int NotesrandomNumber() {
  67.         int intrandom = (int) (Math.random() * 65);
  68.         return intrandom;
  69.     }
  70.     class MyRect {
  71.         Rectangle rect;
  72.         Color color;
  73.     }
  74.     class MyDrawingPanel extends JPanel implements ControllerEventListener {
  75.         boolean EventTestMark;
  76.         Random rnd = new Random();
  77.         List arrayList = new ArrayList();
  78.         int index;
  79.         public void controlChange(ShortMessage event) {
  80.             EventTestMark = true;
  81.             myDrawingPanel.repaint();
  82.         }
  83.         public int dotsRandomNumberX() {
  84.             int intrandomXandX = (int) (Math.random() * 1820);
  85.             return intrandomXandX;
  86.         }
  87.         public int dotsRandomNumberY() {
  88.             int intrandomXandY = (int) (Math.random() * 980);
  89.             return intrandomXandY;
  90.         }
  91.         public Color colorsRandom() {
  92.             int red = (int) (Math.random() * 255);
  93.             int green = (int) (Math.random() * 255);
  94.             int blue = (int) (Math.random() * 255);
  95.             Color randomColor = new Color(red, green, blue);
  96.             return randomColor;
  97.         }
  98.         public void paint(Graphics g) {
  99.             super.paint(g);
  100.             if (EventTestMark == true) {
  101.                 System.out.println(eventsCounter++);
  102.                 List arrayListInternal = new ArrayList();
  103.                 arrayListInternal.add(dotsRandomNumberX());
  104.                 arrayListInternal.add(dotsRandomNumberY());
  105.                 arrayListInternal.add(colorsRandom());
  106.                 arrayListInternal.add((int)(Math.random() * 1820/14)+23); // width
  107.                 arrayListInternal.add((int)(Math.random() * 980/14)+23); // height
  108.                 arrayList.add(arrayListInternal);
  109.                 ListIterator iterator = arrayList.listIterator();
  110.                 while (iterator.hasNext()) {
  111.                     ArrayList arrayListTemp = (ArrayList) iterator.next();
  112.                     g.setColor((Color) arrayListTemp.get(2));
  113.                     g.fillRect((int) arrayListTemp.get(0), (int) arrayListTemp.get(1), (int) arrayListTemp.get(3),  (int) arrayListTemp.get(4));
  114.                     System.out.println(arrayListTemp);
  115.                 }
  116.             }
  117.             EventTestMark = false;
  118.         }
  119.     }
  120.     public class StopPlaying implements ActionListener {
  121.         public void actionPerformed(ActionEvent actionEvent) {
  122.             sequencer.stop();
  123.         }
  124.     }
  125.     public class ContinuePlaying implements ActionListener {
  126.         public void actionPerformed(ActionEvent actionEvent) {
  127.             sequencer.start();
  128.             sequencer.setTempoInBPM(333);
  129.         }
  130.     }
  131. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.818 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы