Simular um Desktop

4 respostas
muhlucas

Bom pessoal to criando um programa onde ele precisa simular um desk tipo tem os ícones com as imagens e quando clica abre algo, só que para essa simulação eu pensei em criar em um loop e adicionar as labels com as imagens dentro de um array, só que eu preciso saber se quando eu clico tem como o getSource do mouseListener ou do Action retornar o numero do indice da lista e não o label pois o label é sempre o mesma para entender melhor segue o codigo: OBS os argumentos que algumas classes deviam receber não estão prontos pois vem direto de um banco de dados, então se puderem não focar em falar que esta com erro na passagem de parâmetros pois é uma classe sendo desenvolvida a espera de outra que esta em desenvolvimento por mim mesmo HAHAHA

/**
 * Classe responsavel por simular um desktop de livros 
 */

package nons.FantasyBook.Gui;

import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.util.*;
import java.io.*;
import javax.imageio.ImageIO;
import javax.swing.*;

public class FantasyDesk 
{
 JPanel pnlDesk,pnlLivro; 
 static int contCapa = 0,contDesc = 0; 
 JLabel lblCapa,lblDesc;
 
 LinkedList<Integer> id_Livro[]; 
 static LinkedList<JLabel> lblCapas, lblDescs; 
 
 public void FantasyDesk()
 {
  pnlDesk = new JPanel();
  pnlDesk.setLayout(new FlowLayout()); 
  lblCapas = new LinkedList();
  lblDescs = new LinkedList();
  Capa();
  Desc();
  Livro();  
 }
 
 /**
  * Metodo responsavel por gerar a capa 
  * @param img 
  * img é uma lista de camilhos das imagens 
  * ele cria apenas 3 capas de cada vez 
  */
 public void Capa()
 {
  // só no momento logo apago isso ! 
 }
 public void Capa(File img[])
 {
  
  for(int c = 0;c < 3;c++)
  {
   lblCapa = new JLabel();
   try 
   {
    BufferedImage buffer = ImageIO.read(img[contCapa]);
    ImageIcon imgCapa = new ImageIcon(buffer);
    imgCapa = new ImageIcon(imgCapa.getImage().getScaledInstance(140, 200, Image.SCALE_DEFAULT));
    lblCapa.setIcon(imgCapa);
    contCapa ++;//metodo para mudar as imagens que estão sendo mostrada, criar  o que volta com contCapa-- 
    lblCapas.add(lblCapa);// depois criar o metodo set
   }
    catch(IOException e)
    {
     e.printStackTrace();   
    }
  }
 }
 /**
  * Desc cria a descrição de cada livro 
  * @param desc
  * desc recebe uma lista de String com as descriçoes, lembrando que o indice do desc deve ser igual ao da img 
  * para poderem pegar o mesmo livro 
  */
 public void Desc(String desc[])
 {
  for(int c = 0; c < 3;c++)
  {
   lblDesc = new JLabel();
   lblDesc.setFont(new Font("Arial",Font.PLAIN,14));
   lblDesc.setForeground(new Color(255,255,255));
   lblDesc.setText(desc[contDesc]);
   contDesc++;//metodo para mudar as imagens que estão sendo mostrada, criar  o que volta com contDesc-- 
   lblDescs.add(lblDesc);//Criar metodo set 
  }
 }
 public void Desc()
 {
  // só no momento logo apago isso ! 
 }
 /**
  * Livro responsavel por criar paineis para cada livro 
  */
 
 public void Livro()
 {
  for(int c = 0; c < 3;c++)
  {
   pnlLivro = new JPanel();
   pnlLivro.setLayout(new GridLayout(2,1));
   pnlLivro.setBackground(new Color(185,185,185,150));
   pnlLivro.addMouseListener(new MouseAdapter()
   {
    @Override
    public void mousePressed(MouseEvent e)
    {
     if(e.getButton() != 1)
     {
      menu.show(e.getComponent(),e.getX(),e.getY());
      //aqui eu precisaria adicionar um getSource para ver de onde vei o click e que pegar o numero do indice do array
     }
    }
   });
   pnlLivro.add(lblCapas.get(contCapa));
   pnlLivro.add(lblDescs.get(contDesc));
   pnlDesk.add(pnlLivro);
  }
 }
 
 JMenuBar menuBar;
 JPopupMenu menu; 
 JMenuItem mnFavoritos, mnExcluir; 
 int id;
 public void MenuOpc()
 {
  menuBar = new JMenuBar();
  menu = new JPopupMenu();
  mnFavoritos = new JMenuItem();
  mnFavoritos.setForeground(new Color(255,255,255));
  mnFavoritos.setText("Favoritos");
  mnFavoritos.setToolTipText("Adicione aos Favoritos");
  mnFavoritos.setBackground(new Color(185,185,185));
  mnFavoritos.setContentAreaFilled(false);
  mnFavoritos.setBorderPainted(false);
  mnFavoritos.setFocusPainted(false);
  mnFavoritos.addActionListener(new ActionListener()
  {
   @Override
   public void actionPerformed(ActionEvent e)
   {
     //aqui eu precisaria receber o indice do array,mas para isso preciso descobrir com pegar 
   }
  });
  menu.add(mnFavoritos);
  mnExcluir = new JMenuItem();
  mnExcluir.setForeground(new Color(255,255,255));
  mnExcluir.setText("Excluir");
  mnExcluir.setToolTipText("Excluir Historia");
  mnExcluir.setBackground(new Color(185,185,185));
  mnExcluir.setContentAreaFilled(false);
  mnExcluir.setBorderPainted(false);
  mnExcluir.setFocusPainted(false);
  mnExcluir.addActionListener(new ActionListener()
  {
   @Override 
   public void actionPerformed(ActionEvent e)
   {
    //aqui eu precisaria receber o indice do array,mas para isso preciso descobrir com pegar 
   }
  });
  menu.add(mnExcluir);
 }
}

Obs² não liguem para alguns comentarias que vcs acharem que não fazem sentido para o post, são apenas lembretes para mim mesmo

4 Respostas

E

getSource() lhe retorna um Object, que acho que nesse caso seja um dos elementos do List que você criou.
Qual é o índice desse elemento?
Na verdade, você não precisa disso, porque você já tem o elemento desejado.
Se você realmente precisa do índice, tem de procurar esse elemento no seu List.

muhlucas

Obrigado, mas realmente eu precisava do índice então fiz desça forma aqui, só não sei ainda se funciona pois preciso esperar outras classes para testar essa… Mais no netbeans erro de copilação nao aparece, só falta saber se irá ter erro durante a execução

/**
 * Classe responsavel por simular um desktop de livros 
 */

package nons.FantasyBook.Gui;

import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.util.*;
import java.io.*;
import javax.imageio.ImageIO;
import javax.swing.*;

public class FantasyDesk 
{
 JPanel pnlDesk,pnlLivro; 
 static int contCapa = 0,contDesc = 0; 
 JLabel lblIcone;
 
 LinkedList<Integer> id_Livro[]; 
 static LinkedList<JLabel> icones; 
 JLabel mostraIcones[]; 
 
 public void FantasyDesk()
 {
  pnlDesk = new JPanel();
  pnlDesk.setLayout(new FlowLayout()); 
  icones = new LinkedList();
  Icone(); 
 }
 
 /**
  * Metodo responsavel por gerar a capa 
  * @param img 
  * @param desc
  * img é uma lista de camilhos das imagens 
  * ele cria apenas 3 capas de cada vez 
  */
 public void Icone()
 {
  // só no momento logo apago isso ! 
 }
 public void Icone(File img[],final String desc[])
 {
  for(int c = 0; c< 3; c++)
  {
   mostraIcones = new JLabel[3];    
   try 
   {
    lblIcone = new JLabel();   
    BufferedImage buffer1 = ImageIO.read(img[contCapa]);
    ImageIcon imgCapa = new ImageIcon(buffer1);
    imgCapa = new ImageIcon(imgCapa.getImage().getScaledInstance(140, 200, Image.SCALE_DEFAULT));
    lblIcone.setIcon(imgCapa); 
    lblIcone.addMouseListener(new MouseAdapter()
    {
     @Override 
     public void mouseEntered(MouseEvent e)
     {
      lblIcone.setText(desc[contDesc]);
      lblIcone.setOpaque(true);
      lblIcone.setFont(new Font("Arial",Font.PLAIN,14));
      lblIcone.setForeground(new Color(0,0,0));
      lblIcone.setBackground(new Color(255,255,255,150));
     }
     @Override 
     public void mouseExited(MouseEvent e)
     {
      lblIcone.setText("");
      lblIcone.setOpaque(false);
     }
    });
    contCapa++;
    contDesc++;
    icones.add(lblIcone);
    mostraIcones[c] = icones.get(contCapa);//vai aderir o numero da capa que ira ter sempre o mesmo numero que o indice 
    Livro();
   }
   catch(IOException e)
   {
    e.printStackTrace();   
   }
  }
 }
 /**
  * Desc cria a descrição de cada livro 
  * @param desc
  * desc recebe uma lista de String com as descriçoes, lembrando que o indice do desc deve ser igual ao da img 
  * para poderem pegar o mesmo livro 
  */
 /**
  * Livro responsavel por criar paineis para cada livro 
  */
 int id; 
 public void Livro()
 {
   pnlLivro = new JPanel();
   pnlLivro.setLayout(new BorderLayout());
   pnlLivro.setBackground(new Color(185,185,185,150));
   pnlLivro.addMouseListener(new MouseAdapter()
   {
    @Override
    public void mousePressed(MouseEvent e)
    {
     if(e.getButton() != 1)
     {
      menu.show(e.getComponent(),e.getX(),e.getY());
      for(int i =0; i < mostraIcones.length;i++)
      {
       if(mostraIcones[i].equals(e.getSource()))
       {
        id = i;            
       }
      }
     }
    }
   });
   pnlLivro.add("Center",icones.get(contCapa));
   pnlDesk.add(pnlLivro);
 }
 
 JMenuBar menuBar;
 JPopupMenu menu; 
 JMenuItem mnFavoritos, mnExcluir; 
 public void MenuOpc()
 {
  menuBar = new JMenuBar();
  menu = new JPopupMenu();
  mnFavoritos = new JMenuItem();
  mnFavoritos.setForeground(new Color(255,255,255));
  mnFavoritos.setText("Favoritos");
  mnFavoritos.setToolTipText("Adicione aos Favoritos");
  mnFavoritos.setBackground(new Color(185,185,185));
  mnFavoritos.setContentAreaFilled(false);
  mnFavoritos.setBorderPainted(false);
  mnFavoritos.setFocusPainted(false);
  mnFavoritos.addActionListener(new ActionListener()
  {
   @Override
   public void actionPerformed(ActionEvent e)
   {
     
   }
  });
  menu.add(mnFavoritos);
  mnExcluir = new JMenuItem();
  mnExcluir.setForeground(new Color(255,255,255));
  mnExcluir.setText("Excluir");
  mnExcluir.setToolTipText("Excluir Historia");
  mnExcluir.setBackground(new Color(185,185,185));
  mnExcluir.setContentAreaFilled(false);
  mnExcluir.setBorderPainted(false);
  mnExcluir.setFocusPainted(false);
  mnExcluir.addActionListener(new ActionListener()
  {
   @Override 
   public void actionPerformed(ActionEvent e)
   {
    
   }
  });
  menu.add(mnExcluir);
 }
}
E

use getName() e setName(). Como?? essa eu deixo pra você descobrir.

muhlucas

Obrigado essa foi uma ótima solução.

Usei o setName a cada vez que cria um Label ou seja ele cria um lbl.setName(“i” + cont)
assim cada painel vai ficar com um numero e esse numero é o mesmo que o do index da lista que esta o id que eu preciso

depois eu só pego o numero

String d = pnlLivro.getName();
d = d.substring(1,d.length());

Posso esta enganado quanto ao setName e getName, mas essa foi uma ótima solução.
Obrigado

Criado 4 de outubro de 2012
Ultima resposta 13 de out. de 2012
Respostas 4
Participantes 3