Como ter um JList com imagem de fundo estática?

Olá pessoal
Estou com o seguinte problema: Preciso ter uma lista com uma imagem de fundo estática.

Já tentei:
1º Colocar a imagem num JPanel - mas ao colocar a lista por cima, esta fica menor do que o JPanel.
2º Colocar a imagem como fundo do JList - mas os itens da lista aparecem por trás da imagem.
3º Colocar a imagem como fundo do JScrollPanel - mas a imagem se move ao movimentar a lista.

Todas soluções são bem-vindas.

Obrigada.

[quote=bbmany]Olá pessoal
Estou com o seguinte problema: Preciso ter uma lista com uma imagem de fundo estática.

Já tentei:
1º Colocar a imagem num JPanel - mas ao colocar a lista por cima, esta fica menor do que o JPanel.
2º Colocar a imagem como fundo do JList - mas os itens da lista aparecem por trás da imagem.
3º Colocar a imagem como fundo do JScrollPanel - mas a imagem se move ao movimentar a lista.

Todas soluções são bem-vindas.

Obrigada.[/quote]

Crie um DefaultListModel com a imagem setada insira na criação do objeto Jlist que por sua vez insere no JScrollPanel.

Ex:


DefaultListModel	modelLstMarcas= new DefaultListModel(){
				
				public void paintComponent(Graphics g){           
		         g.drawImage(Componente ImageIcon,0,0,tamanhoX,tamanhoY,modelLstMarcas);}   
		                             };

Jlist lstMarcas = new JList(modelLstMarcas);
lstMarcas.setSelectionBackground(Color.orange);
lstMarcas.setBackground(Color.DARK_GRAY);
lstMarcas.setForeground(Color.WHITE);		


JCrollPane scrollLstMarcas= new JScrollPane(lstMarcas);
scrollLstMarcas.setBounds(new Rectangle(15, 15, 136, 166));
scrollLstMarcas.setBorder(BorderFactory.createEtchedBorder(Color.lightGray, Color.black));
scrollLstMarcas.setBorder(BorderFactory.createBevelBorder(2));
scrollLstMarcas.setFont(new Font("Verdana", Font.BOLD, 12));

Vou testar e já lhe retorno.
Obrigada.

Olá neoCortex,

Não consegui implementar sua solução. Poderia me explicar melhor?

[quote=bbmany]Olá neoCortex,

Não consegui implementar sua solução. Poderia me explicar melhor?[/quote]

Oi… Está meio difícil de testar pois não estou em casa mas creio que deva funcionar vamos lá…

public class FrmdoPaint {
private static Image principalPlanodeFundo;
private JFrame framePrincipal;
private JDesktopPane panePrincipal;



//Contrutor
public FrmdoPaint(){

//aqui pego imagem de um tipo imageIco "getImage()"
principalPlanodeFundo = (new ImageIcon("Foto.png").getImage());

//crio o model
DefaultListModel modelLstPlanoFundo= new DefaultListModel();

//Crio a lista e pinto com a imagem principalPlanodeFundo que está no tamanho 500,800
lstPlanoFundo = new JList(modelLstPlanoFundo){
			public void paintComponent(Graphics g){           
				g.drawImage(principalPlanodeFundo,0,0,500,800,scrollPlanofundo);}};

JScrollPane scrollLstPlanoFundo= new JScrollPane(lstPlanoFundo);
scrollLstPlanoFundo.setsize(500,800);
scrollLstPlanoFundo.setLocation(20,20);


//Crio o Painel que vai receber os componentes
panePrincipal = new JDesktopPane();
panePrincipal.add(scrollLstPlanoFundo);


//Crio o frame e adiciono o painel
framePrincipal = new JFrame();
framePrincipal.setSize(800,600);
framePrincipal.add(panePrincipal);
framePrincipal.setVisible(true);
}

}

Estou sem IDE para testar más creio que isso já te ajude a resolver seu problema.

se quiser adicionar itens na lista adicione no DefaultListModel:

modelLstPlanoFundo.addElement("Oiiii");
modelLstPlanoFundo.addElement("Ola");
modelLstPlanoFundo.addElement("Até Mais");

Um grande Abraço!!!

Testei e consegui colocar a imagem no fundo mas não consegui exibir os valores da lista
:frowning:

[quote=bbmany]Testei e consegui colocar a imagem no fundo mas não consegui exibir os valores da lista
:([/quote]

Está adicionando corretamente os valores?

Chegando em casa depois da universidade faço um teste, infelizmente não tenho aula de laboratório na segunda…
Creio que pode estar acontecendo é os valores estarem por baixo, não previ isto, desculpe…

tente adicionar um label ou coisa do gênero diretamente no JList somente para teste e ver se aparece pois, parece que o DefaultListModel não suporta o método repaint().

lstPlanoFundo.add(jlabel);