Files
thing/CreditsPanel.java
2026-05-13 21:58:16 +00:00

58 lines
1.9 KiB
Java

import javax.swing.*;
import java.awt.*;
public class CreditsPanel extends JPanel {
private JList<String> creditsList;
private JScrollPane scrollPane;
private Timer timer;
private int scrollPos = 0;
public CreditsPanel(String[] data, Runnable onComplete) {
setLayout(new BorderLayout());
setBackground(Color.BLACK);
//JList
creditsList = new JList<>(data);
creditsList.setBackground(Color.BLACK);
creditsList.setForeground(Color.WHITE);
creditsList.setFont(new Font("SansSerif", Font.BOLD, 20));
creditsList.setFixedCellHeight(40); // Consistent spacing
DefaultListCellRenderer renderer = (DefaultListCellRenderer) creditsList.getCellRenderer();
renderer.setHorizontalAlignment(SwingConstants.CENTER);
//ScrollPane
scrollPane = new JScrollPane(creditsList);
scrollPane.setBorder(null);
scrollPane.getVerticalScrollBar().setPreferredSize(new Dimension(0, 0)); // Hidden bar
add(scrollPane, BorderLayout.CENTER);
//Animation
timer = new Timer(30, e -> {
JScrollBar vertical = scrollPane.getVerticalScrollBar();
scrollPos++;
vertical.setValue(scrollPos);
// Add a buffer (e.g., 100 pixels) to the finish check
// to keep it on screen longer
if (scrollPos >= (vertical.getMaximum() - vertical.getVisibleAmount()) + 100) {
timer.stop();
onComplete.run();
}
});
// Skip Button
JButton skip = new JButton("SKIP");
skip.addActionListener(e -> {
timer.stop();
onComplete.run();
});
add(skip, BorderLayout.SOUTH);
}
public void start() {
scrollPos = 0;
timer.start();
}
}