ecco il codice
codice:
public class Sequenza3 extends JFrame{
static int posizionev;
static Pannello2 p;
public static boolean primavolta=true;
JButton sposta=null;
JButton start=null;
public Mazzo m;
Carta d;
ImageIcon ic;
static boolean inProgress=false;
LinkedList<Carta>carteMazzo;
static int contatore;
public Sequenza3(){
super("Sequenza Foto");
m=new Mazzo();
p= new Pannello2();
p.setLayout(null);
setContentPane(p);
contatore=0;
carteMazzo=new LinkedList<Carta>();
LinkedList<Carta>l=new LinkedList<Carta>();
l.addAll(m.getCarte());
d=null;
Iterator<Carta>it1=l.iterator();
while(it1.hasNext()){
d=it1.next();
ImageIcon ij=new ImageIcon(d.getFacciata());
d.setIcon(ij);
d.setBorderPainted(false);
d.setBounds(20, 200, 120, 125);
d.setclickabile(false);
d.setContentAreaFilled(false);
d.setEnabled(true);
d.setVisible(true);
p.add(d);
carteMazzo.add(d);
m.rigeneraMazzo(carteMazzo);
}
start=new JButton("start");
start.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
if(primavolta){
start(6);
}
else start(2) ;
}
});
start.setBounds(100,600,100,50);
p.add(start);
sposta=new JButton("sposta");
sposta.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
sposta();
}
});
sposta.setBounds(200,600,100,50);
p.add(sposta);
setSize(950,700);
setLocation(200,40);
setVisible(true);
//repaint();
}
public static void start(int n){
if(inProgress)
return;
inProgress=true;
primavolta=false;
Thread runner=new Thread() {
public void run(){
for (int j=0;j<n;j++){
Carta f=(Carta)p.getComponent(contatore);
contatore++;
int i=0;
p.reset(20,170);
while (i<40){//i è il passo del thread
ImageIcon imc=new ImageIcon( f.getFacciata());
p.paintbutton(f,imc);
i++;
try {
sleep(50);
} catch (Exception ex) {}
}
inProgress=false;
}
}
};
runner.start();//deve lasciare libero il thread che richiama paint...
}
public void sposta(){
Component[] d=p.getComponents();
for(int i=0;i<d.length;i++){
if(d[i] instanceof Carta){
Carta f=(Carta)d[i];
if(f.getposizione()==8){
Point po=f.getLocation();
int x=(int)po.getX();
int y=(int)po.getY();
System.out.println(x+" "+y);
int j=0;
p.reset(x,y);
while (j<30){ j è i passo del thread che posizionera la carta al centro del pannello
ImageIcon imc=new ImageIcon( f.getFacciata());
p.paintcarta(f,f.getposizione(),j);
j++;
}
}
}
}
}
public static int getposizionivuote(){
return posizionev;
}
public static void setposizionevuota(int pos){
posizionev =pos;
}
public int getContatore(){
return contatore;
}
public static void moveCarta(Carta v){
if(inProgress)
return;
inProgress=true;
Thread runner=new Thread() {
public void run(){
Point po=v.getLocation();
int x=(int)po.getX();
int y=(int)po.getY();
int i=0;
p.reset(x,y);
while (i<30){
ImageIcon imc=new ImageIcon( v.getFacciata());
p.paintcarta(v,v.getposizione(),i);
i++;
try {
sleep(50);
} catch (Exception ex) {}
}
inProgress=false;
}
};
runner.start();//deve lasciare libero il thread che richiama paint...
}
public static void main(String[] args) {
Sequenza3 s = new Sequenza3();
s.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
nel metodo sposta invocato quando si preme il tasto sposta vado a cercare la carta che che si e spostata in posizione 8 cioè al centro del pannello però non accede proprio a quelle carte ,infatti nel system.out non stampa niente, non capisco perchè.
Andbin cmq ho provato come consigliavi tu ma una volta aggiunto le carte nel pannello nel costruttore perdo quel riferimento alla carta nel mazzo. nel metodo start Il programma distribuiva le sei carte ma restava visibile la prima carta del mazzo quindi in realta non spostava le carte dal pannello ma creava un altro mazzo e spostava le carte di del <Carta>mazzocarte.
Epoi non capisco perche se un bottone si sovrappone ad unn altro bottone si vede la prima carta e non quella sovrapposta.esiste un modo per fare vedere l'ultimo bottone ?