Как сделать JScrollPane (в BorderLayout, содержащем JPanel) плавно автоматически прокручивать

Я пытаюсь использовать JPanel различного размера (потенциально намного шире, чем стандартный экран) внутри JScrollPanel. В настоящее время он работает отлично, и я настроил полосы прокрутки для нормальной работы вручную, однако я бы хотел, чтобы JPanel постоянно «прокручивал» влево, чтобы со временем все отображалось. Все ответы, которые я нашел, относятся к JTextArea и используют Carets, или использовать rectToVisible. Ни один из них не сработает, потому что я пытаюсь прокрутить внутренне до одной JPanel.

Я включил то, что, как я считаю, весь соответствующий код ниже.

center - это JPanel (из которых Grid является подклассом, используемый для рисования, в частности, сетки с определенными цветными ячейками) с BorderLayout, который я хотел бы автоматически прокрутить.

public GuiViewFrame(Song playMe) {
  String[][] songArray = playMe.to2DArray();

  this.displayPanel = new ConcreteGuiViewPanel(playMe);
  main = new JPanel();
  main.setLayout(new BorderLayout());
  displayPanel.setLayout(new BorderLayout());
  center = new Grid(playMe);
  labels = new Labels(playMe);
  horiz = new Horiz(playMe);
  center.setPreferredSize(new Dimension(10 * songArray.length, 10 * songArray[0].length));
  horiz.setPreferredSize(new Dimension(10 * songArray.length, 10));
  horiz.setVisible(true);

  main.add(center, BorderLayout.CENTER);
  main.add(horiz, BorderLayout.NORTH);

  scroll = new JScrollPane(main,
        JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
  add(scroll, BorderLayout.CENTER);
  labels.setPreferredSize(new Dimension(20, 10 * songArray[0].length));
  labels.setVisible(true);
  add(labels, BorderLayout.WEST);

  JScrollBar horiz = scroll.getHorizontalScrollBar();
  InputMap im = horiz.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
  im.put(KeyStroke.getKeyStroke("RIGHT"), "positiveUnitIncrement");
  im.put(KeyStroke.getKeyStroke("LEFT"), "negativeUnitIncrement");
  im.put(KeyStroke.getKeyStroke("HOME"), "minScroll");
  im.put(KeyStroke.getKeyStroke("END"), "maxScroll");

  this.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
  this.pack();
}

В целом проект состоит в том, чтобы создать представление для воспроизведения музыки, сочетающее в себе MIDI и GUI, но сейчас, когда MIDI воспроизводит достаточно песни, соответствующие ноты остаются за кадром. Я хотел бы прокрутить со скоростью, чтобы идти в ногу с MIDI.

Ответы на вопрос(2)

Ваш ответ на вопрос