Как сделать 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.