1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

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

Discussão em 'Programação' iniciada por _Rock_, 16 de Novembro de 2012. (Respostas: 0; Visualizações: 1047)

  1. _Rock_

    _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: 16 de Novembro de 2012

Partilhar esta Página