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

6 respostas
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.

6 Respostas

neoCortex

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.

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));
bbmany

Vou testar e já lhe retorno.
Obrigada.

bbmany

Olá neoCortex,

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

neoCortex

bbmany:
Olá neoCortex,

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

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!!!

bbmany

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

neoCortex

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

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);
Criado 15 de setembro de 2008
Ultima resposta 15 de set. de 2008
Respostas 6
Participantes 2