[JAVA Swing UI em Netbeans] Ajuda em colocar uma JList com uma imagem de fundo

_Rock_

I'm cool cuz I Fold
Olá :)

Precisava de ajuda com o seguinte código. O meu objectivo é colocar uma JList com uma imagem de fundo, porque simplesmente não quero os backgrounds que aquilo tem por omissão. Inicialmente queria tornar a JList simplesmente transparente, mas rapidamente percebi que isso é impossível (pelas pesquisas que fiz). Descobri um tutorial para colocar uma imagem como fundo numa JList, mas não está a resultar comigo. (Tutorial: http://www.javarichclient.com/display-a-jlist-with-a-background-image/ )

O código compila e funciona, simplesmente o fundo da JList não se altera, permanece branco. Não sei o que estarei a fazer mal...ainda sou um novato nisto e portanto perdoem-me se tiver a incorrer em práticas más de Java.

Código:

Código:
public class ComplexCellRenderer extends DefaultListCellRenderer implements ListCellRenderer {
  
       protected DefaultListCellRenderer defaultRenderer = new DefaultListCellRenderer();
       private Image image;
       private JScrollPane scrollPane;
       private JList list;
       int row = -1;
       
       public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
           
           //Icon theIcon = null;
           
           JLabel renderer = (JLabel) defaultRenderer.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
           
           String values = (String) value;
           String[] tokens = values.split("[#]"); 
           String Jogador = tokens[0];
           String estado = tokens[1];
           
           if(Jogador.length() < 15)
           {
               for(int i=Jogador.length(); i<15; i++)
                   Jogador = Jogador + " ";
           }
    
           String textToPrint = Jogador + estado;
           
           if(estado.equals("Online"))
           {
               renderer.setForeground(Color.GREEN);
               //theIcon = (Icon) values[2];
           } 
    
           else if(estado.equals("A Jogar")) 
           {
               renderer.setForeground(Color.RED);
           }
    
    
           //if (theIcon != null) {
           //renderer.setIcon(theIcon);
           //}
    
           renderer.setText(textToPrint);
           return renderer;
  }
  
       
       public void BackgroundImageListCellRenderer(JScrollPane scrollPane, Image image) {
        this.image = image;
        this.scrollPane = scrollPane;
        
        // must use SIMPLE_SCROLL_MODE to force scrollpane to redraw the whole JList,
        // otherwise scrollpane will use 'cached' images
        scrollPane.getViewport().setScrollMode(JViewport.SIMPLE_SCROLL_MODE);
        
        // we will paint our own background
        setOpaque(false);
    }
       
       @Override
       protected void paintComponent(Graphics g) {
        
        Graphics2D g2d = (Graphics2D) g;
        
        // compute the offset of the image we want to draw
        Rectangle cellBounds = list.getCellBounds(row, row);
        Point p = cellBounds.getLocation();
        Point viewPosition = scrollPane.getViewport().getViewPosition();
        p.x -= viewPosition.x;
        p.y -= viewPosition.y;
        
        // draw the image from the offset computed above
        AffineTransform transform = AffineTransform.getTranslateInstance(-p.x, -p.y);
        g2d.drawImage(image, transform, null);
        
        // let the original renderer do its work
        super.paintComponent(g);
    }


}


Main da Interface:

Código:
public MainMenuUI(boolean som, String idiom, AppControler c) {
        initComponents();
        listOnlineFriends.setLayoutOrientation(JList.HORIZONTAL_WRAP);
        listOnlineFriends.setFixedCellWidth(150);
        ComplexCellRenderer renderer = new ComplexCellRenderer();
        Image img = Toolkit.getDefaultToolkit().getImage(MainMenuUI.class.getResource("/apresentacao/imagens/black-canvas-fabric-texture.jpg"));
        renderer.BackgroundImageListCellRenderer(onlineListScrollpane, img);
        listOnlineFriends.setCellRenderer(renderer);
        
        String[] Jogadores = {"Antonio#Online", "Joao#A Jogar"};
        updateOnlineList(Jogadores);
        estadoSom = som;
        idioma = idiom;
        capp = c;
        
        if(idioma == "PT")
        {
            ToggleButtonUKFlag.setIcon(UKDesligado);
        }
        
        else
        {
            ToggleButtonPTFlag.setIcon(PTDesligado);
        }
        
        if(estadoSom == true)
        {
            ToggleButtonSom.setIcon(comSom); 
        }
        
        else
        {
            ToggleButtonSom.setIcon(semSom); 
        }
      
    }

Função UpdateOnlineList

Código:
public void updateOnlineList(String[] amigos)
    {
        DefaultListModel model1 = new DefaultListModel();
        listOnlineFriends.setModel(model1);
        ArrayList currentFriends = new ArrayList(Arrays.asList(model1.toArray()));
        ArrayList newFriends = new ArrayList(Arrays.asList(amigos));
        
        if(!currentFriends.equals(newFriends))
        {
            model1.removeAllElements();
   
            for(int i=0; i<newFriends.size(); i++)
            {
                model1.addElement(amigos[i]);
            }
        }
          
    }


Agradeço desde já qualquer ajuda!

_Rock_
 
Última edição:
Back
Topo