Galera, preciso de ajuda…
To criando um programa para deficientes fisicos em que quando o usuario clicar numa imagem ela aparecera no lado inferior da tela…
ai eu criei uma classe Janela
Janela1:
package Codigo;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class Janela1 extends JFrame {
int pWidth, pHeight;
CarregarImagens imagens;
int posX;
int posY;
int y1[] = {50,50,50,50,50,50,50,150,150,150,150,150,150,150,250,250,250,250,250,250,250};
Image nome3[] = new Image[21];
PintarImagem pi;
EventImagem ei;
JPanel inferior,superior;
public Janela1(int x, int y, CarregarImagens ci) {
pWidth =x;
pHeight = y;
imagens = ci;
Container c = getContentPane();
c.setLayout(null);
setBackground(Color.white);
setVisible(true);
setSize(pWidth,pHeight);
setResizable(true);
superior = new PintarImagem(pWidth,pHeight,imagens);
c.add(superior);
superior.setBounds(-30,-30,pWidth,pHeight-200);
//Aqui aonde estão as imagens que serão clicadas pelo mouse
JLabel rotulo1 = new JLabel("");
rotulo1.setIcon(getImagem("00021.gif"));
rotulo1.setBounds(50,pHeight-240,90,90);
JLabel rotulo2 = new JLabel("");
rotulo2.setIcon(getImagem("00031.gif"));
rotulo2.setBounds(150,pHeight-240,90,90);
JLabel rotulo3 = new JLabel("");
rotulo3.setIcon(getImagem("00111.gif"));
rotulo3.setBounds(620,pHeight-240,90,90);
c.add(rotulo1);
c.add(rotulo2);
c.add(rotulo3);
inferior = new EventImagem(pWidth,pHeight,imagens);
c.add(inferior);
inferior.setBounds(50,pHeight-150,90,90);
//aqui aonde eu pintaria as imagens que foi clicado no JPanel superior
addMouseListener(new Tratador());
}
public ImageIcon getImagem(String nome){
String caminhoDaImagem = "/Imagens2/" + nome;
ClassLoader classLoader = this.getClass().getClassLoader();
ImageIcon icone = new ImageIcon(getClass().getResource(caminhoDaImagem));
return icone;
}
public class Tratador extends MouseAdapter {
public void mousePressed(MouseEvent e) {
String s;// --ö)
posX = e.getX();
posY = e.getY();
EventImagem.passarMouse(posX, posY);
repaint();
}
}
}
vcs estao vendo que tem 2 JPanel: superior e inferior, no superior e aonde eu estou carregando as imagens que sao 21 e quando o usuario cliquer numa determinada imagem eu gostaria que ela aparecesse no JPanel inferior…
vou postar as 2 classe que extendem JPanel superior e inferior: PintarImagem e EventImagem
PintarImagem:
package Codigo;
import javax.swing.*;
import java.awt.*;
import java.io.IOException;
public class PintarImagem extends JPanel {
Image nome2[] = new Image[21];
CarregarImagens ima;
static int x1[] = new int[21];
static int y1[] = new int[21];
int pWidth, pHeight;
static int posX,posY;
static boolean passou2;
public PintarImagem(int w, int h, CarregarImagens c) {
ima = c;
pWidth = w;
pHeight = h;
setImage();
}
public void setImage() {
String s;
for(int i = 0; i <= 20; i++) {
s = (String)ima.id.get(i);
nome2[i] = ima.getImage(s, i);
}
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
int x =50, y = 50;
for(int i = 0; i <= 20; i++) {
if(x > pWidth - 100) {
y = y + 100;
x = 50;
x1[i] = x;
y1[i] = y;
}
try {
g.drawImage(nome2[i], x,y,this);
x1[i] = x;
x = x + 100;
}
catch(Exception e) {
e.printStackTrace();
}
}
}
}
e EventImagem:
package Codigo;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class EventImagem extends JPanel {
static int posX;
static int posY;
int y1[] = {50,50,50,50,50,50,50,150,150,150,150,150,150,150,250,250,250,250,250,250,250};
static Image[] nome3 = new Image[21];
PintarImagem pi;
int pWidth, pHeight;
CarregarImagens imagens2;
static String s = "";
public EventImagem(int x,int y,CarregarImagens imagens) {
pWidth =x;
pHeight = y;
imagens2 = imagens;
}
public static void passarMouse(int x1, int x2) {
posX = x1;
posY = x2;
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
int x = 50;
for(int i = 0; i <=20;i++) {
if(((posX >= pi.x1[i])&&(posX <= pi.x1[i]+ 90))&&
((posY >= y1[i])&&(posY <= y1[i] + 90))) {
//coordenadas x ja são existentes
try {
s = (String)imagens2.id.get(i);
nome3[i] = imagens2.getImage(s, i);
g.drawImage(nome3[i],x,pHeight-150,this);
x = x + 100;
}
catch(Exception e) {
e.printStackTrace();
}
}
}
}
}
O que esta ocorendo e que eu carrego as imagens quando vou detectar o clique do mouse ela executa o paintCompoent da EventImagem porem nao pinta a imagem, eu debuguei o codigo e percebi que ela executa o paintComponent da EventImagem e logo depois executa o paintComponent da PintarImagem… mas nao sei o que esta acontecendo, gostaria de que alguem pudesse ajudar