In short, I´m trying to make a program that mocks a streaming service interface for an assignment. The program creates two separate JScrollPanes with same specs (size, constraints..), one for movies and one for series, each containing a JPanel which then contains other movie or series components. Then, I created a JLayeredPane (without changing its layout), in which I want to add the two JScrollPanes as separate layers. However, when adding the JScrollPanes to the JLayeredPane and running the code, the JLayeredPane always shows the last added JScrollPane, regardless of the index I set upon adding.
//creates the movie JScrollPane
JScrollPane moviePanel = stuff.showMovies(movieLogic);
//creates the series JScrollPane
JScrollPane seriesPanel = stuff.showSeries(seriesLogic);
//creates a JLayeredPane in which I want to insert the JScrollPanes as layers
layerPanel = new JLayeredPane();
//adds the moviePanel to index 3 and seriesPanel to index 5 in the JLayeredPane
//I´m assuming index 3 is not as deep as index 5, meaning moviePanel should be in the front,
//but I have also tried switching indexes just in case
layerPanel.add(moviePanel, 3);
layerPanel.add(seriesPanel, 5);
//another attempt at getting the moviePanel to the front of the JLayeredPane, but
//seriesPanel still shows up on top
layerPanel.moveToFront(moviePanel);
What am I missing or doing wrong?
Again, the simplest solution might be to use a JList and swap models. For example the following uses two models, one that displays color Strings the other days of the week, and the models are swapped in a button's action listener:
import java.awt.BorderLayout;
import javax.swing.*;
public class SwapStuff extends JPanel {
public static final String[] DAYS_OF_WEEK = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday",
"Saturday" };
public static final String[] COLORS = { "Red", "Orange", "Yellow", "Green", "Blue", "Violet" };
private DefaultListModel<String> dayModel = new DefaultListModel<>();
private DefaultListModel<String> colorModel = new DefaultListModel<>();
private JList<String> list = new JList<>(dayModel);
private JTextField displayField = new JTextField(20);
public SwapStuff() {
for (String element : DAYS_OF_WEEK) {
dayModel.addElement(element);
}
for (String element : COLORS) {
colorModel.addElement(element);
}
list.setVisibleRowCount(5);
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
JScrollPane scrollPane = new JScrollPane(list);
displayField.setFocusable(false);
JButton weekdayBtn = new JButton("Weekdays");
JButton colorBtn = new JButton("Colors");
weekdayBtn.addActionListener(e -> {
if (dayModel != list.getModel()) {
list.setModel(dayModel);
}
});
colorBtn.addActionListener(e -> {
if (colorModel != list.getModel()) {
list.setModel(colorModel);
}
});
list.addListSelectionListener(e -> {
String selection = list.getSelectedValue();
displayField.setText(selection);
});
JPanel buttonPanel = new JPanel();
buttonPanel.add(weekdayBtn);
buttonPanel.add(colorBtn);
setLayout(new BorderLayout());
add(displayField, BorderLayout.PAGE_START);
add(scrollPane);
add(buttonPanel, BorderLayout.PAGE_END);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> createAndShowGui());
}
private static void createAndShowGui() {
SwapStuff mainPanel = new SwapStuff();
JFrame frame = new JFrame("SwapStuff");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
}