все.Я в моем первом семестре Uni и пытаюсь создать макет-версию потокового сервиса.В настоящее время фильмы / сериалы показываются в виде сетки, созданной из ArrayList of Media (суперкласс).Элементы меню были добавлены, которые могут сортировать медиа.Это делается путем запуска создания нового отсортированного списка, а затем создания новой сетки.
private JScrollPane makeGrid(ArrayList<Media> gridList) throws IOException
{
mediaPanel = new JPanel();
mediaPanel.setLayout(new GridLayout(20,10));
/*Path mediaPicPath = FileSystems.getDefault().getPath("MedieBilleder");
File dir1;
dir1 = mediaPicPath.toFile();*/
File dir1 = new File("src/MedieBilleder");
if(dir1.isDirectory()) {
File[] mediaPicFiles;
mediaPicFiles = dir1.listFiles();
for(Media m : gridList) {
for(File f : mediaPicFiles){
String compare = f.toString().replace(".jpg","");
if(!compare.contains("\\")){
String[] imgname = compare.split("/");
compare = imgname[2];
}
else{
String[] imgname = compare.split("\\\\");
compare = imgname[2];
}
compare.replaceAll("(^\\h*)|(\\h*$)","");
if(m.getTitle().toLowerCase().trim().equals(compare.toLowerCase().trim())){
BufferedImage mediaPic = ImageIO.read(f);
JButton button = new JButton(new ImageIcon(mediaPic));
button.setBorder(BorderFactory.createEmptyBorder());
button.setContentAreaFilled(false);
button.addActionListener( e -> mediachoice(m.getTitle(),mediaPic));
mediaPanel.add(button);
}
}
}
}
JScrollPane scroller = new JScrollPane(mediaPanel);
scroller.getVerticalScrollBar().setUnitIncrement(16);
return scroller;
}
Метод makeGrid возвращает JScrollPane, который работает с mousewhell.Однако у меня возникли проблемы с изменением ScrollPane на новую Scrollpane всякий раз, когда я хочу отсортировать свой список.
Например, по имени от A до Z:
private void aZ() {
currentList = this.sorter.titleAZ(currentList);
try{changeGrid(this.frame,currentscrollpane,makeGrid(currentList));}
catch(IOException e){e.printStackTrace();}
}
Как выКак видите, этот конкретный выбор запускает метод changeGrid:
public void changeGrid(JFrame frame, JScrollPane currentscrollpane, JScrollPane newscrollpane)
{
currentscrollpane.getViewport().remove(currentscrollpane);
currentscrollpane.getViewport().add(newscrollpane);
frame.repaint();
}
Этот метод изменяет отображаемый список фильмов, но делает полосу прокрутки недоступной для прокрутки мышью, если только вы не прокручиваете ее непосредственно на полосе прокрутки.Я предполагаю, что это проблема с тем, как я заменяю JScrollPane (но я не мог найти другой способ сделать это).