58 lines
1.9 KiB
Java
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();
|
|
}
|
|
}
|