Hola a todos , tengo una aplicacion en la que muestro por pantalla unos botones que contienen el nombre de una pelicula.
El problema lo tengo creando un filtro , he creado aparte un JComboBox que contiene los filtros posibles.
el metodo de filtro funciona , el problema lo tengo al cargar visualmente de nuevo las cosas.
Al seleccionar un filtro , la pantalla deberia recargar las peliculas que cumplan x condicion.
Estoy intentando refrescar la pantalla con repaint pero no funciona.
CODE:
private JComboBox getCbFiltro() {
if (cbFiltro == null) {
cbFiltro = new JComboBox();
cbFiltro.addFocusListener(new FocusAdapter() {
@Override
public void focusGained(FocusEvent e) {
pnBillboard.removeAll();
pnBillboard.repaint();
}
@Override
public void focusLost(FocusEvent e) {
addFilmsToBillboard();
pnBillboard.repaint();
}
});
/*
addFilmsToBillboard();
contentPane.repaint();
*/
cbFiltro.addItem("");
cbFiltro.addItem("Todos los públicos");
cbFiltro.addItem("3D");
}
return cbFiltro;
}
private void addFilmsToBillboard() {
JButton aux;
pnBillboard.setLayout(resizeGridLayout(billboard.getNumberOfFilms()));
for (final Film each : billboard.getFilms()) {
if(filtrar(each)){ //si cumple la condicion se añade
aux = new JButton("<html>" + each.getTitle() + "<br>"
+ each.getGender() + " " + each.getRecomendedAge() + " "
+ each.is3DString() + "</html>");
aux.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
((CardLayout) pnMain.getLayout()).show(pnMain,
"panelDescription");
tASumary.setText(each.getSynopsis());
lbTituloPelicula.setText(each.getTitle());
lbGeneropelicula.setText(each.getGender());
lblEdadr.setText(each.getRecomendedAge());
lblDuracionfilm.setText(Integer.toString(each.getLenght())
+ " m");
checkB3D.setSelected(each.isIs3D());
lblFroom.setText(each.getRoom());
cBDates.setModel(new DefaultComboBoxModel(each
.getPremiereDates()));
cBHours.setModel(new DefaultComboBoxModel(each.getDates()));
cbFiltro.setVisible(false); //esconder casilla filtro
cargarImagenPelicula(each);
showStep(false, true, false, false);
}
});
pnBillboard.add(aux);
}
}//if
}
private boolean filtrar(Film film){
String filter=(String)cbFiltro.getSelectedItem();
switch (filter) {
case "3D":
return film.isIs3D();
case "Todos los publicos":
return film.getRecomendedAge().equals("Todos los públicos");
default:
return true;
}
}
Un saludo y espero su ayuda.
PD: creo recordar que una vez utilize algo que se llamaba UIManager pero me he puesto a mirar y no recuerdo como podria haberlo utilizado
Lo acabo de medio solucionar , he añadido una llamada al el metodo updateUI y ahora funciona cada vez que pierde el foco.
¿pero que diferencia hay entre updateUI y repaint?