Ciao a tutti,
ho fatto un piccolo programma che simula il lancio di un dado, ma ho un problema che non riesco a risolvere. L'attenzione va concentrata sulla parte di codice evidenziata in rosso:
codice:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Dado extends JFrame
{
	Figura dado=new Figura();
	Dimension dim1=new Dimension(285,245);
	boolean d=false;
	public Dado()
	{
		setTitle("Dado a 6 facce");
		getContentPane().setPreferredSize(dim1);
		pack();
		setLocation(100,100);
		try{UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");}
		catch(Exception e){System.out.println("Errore L&F");}
		setVisible(true);
		setResizable(false);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		add(dado);
		JButton lancia=new JButton("Lancia");
		lancia.addActionListener(new PulsanteLancia());
		add(lancia,BorderLayout.EAST);
		JCheckBox duedadi=new JCheckBox("Usa 2 dadi",false);
		duedadi.addMouseListener(new DueDadi());
		add(duedadi,BorderLayout.SOUTH);
	}
	public class PulsanteLancia implements ActionListener
	{
		public void actionPerformed(ActionEvent evt)
		{
			dado.rilancia();
		}
	}
	public class DueDadi implements MouseListener
	{
		public void mousePressed(MouseEvent evt)
		{
			d=!d;
		}
		public void mouseClicked(MouseEvent evt){}
		public void mouseReleased(MouseEvent evt){}
		public void mouseEntered(MouseEvent evt){}
		public void mouseExited(MouseEvent evt){}
	}
	public static void main(String[] args)
	{
		new Dado();
	}
	public class Figura extends Canvas
	{
		int faccia=((int)((Math.random())*6)+1);
		int faccia2=((int)((Math.random())*6)+1);
		boolean c=false;
		public void paint(Graphics g)
		{
			setBackground(Color.WHITE);
			g.setColor(Color.BLACK);
			g.drawRoundRect(15,15,200,200,30,30);
			if(faccia==2||faccia==4||faccia==5||faccia==6){g.fillOval(35,35,40,40);}
			if(faccia==6){g.fillOval(95,35,40,40);}
			if(faccia==3||faccia==4||faccia==5||faccia==6){g.fillOval(155,35,40,40);}
			if(faccia==1||faccia==3||faccia==5){g.fillOval(95,95,40,40);}
			if(faccia==3||faccia==4||faccia==5||faccia==6){g.fillOval(35,155,40,40);}
			if(faccia==6){g.fillOval(95,155,40,40);}
			if(faccia==2||faccia==4||faccia==5||faccia==6){g.fillOval(155,155,40,40);}
			if(c){g.fillRect(4,225,1,2);}
			g.setColor(Color.WHITE);
			g.drawRect(0,0,445,445);
			System.out.println("Disegnato");
			if(d)
			{
				getContentPane().setPreferredSize(new Dimension(510,255));
				pack();
				g.setColor(Color.BLACK);
				g.drawRoundRect(230,15,200,200,30,30);
				if(faccia2==2||faccia2==4||faccia2==5||faccia2==6){g.fillOval(250,35,40,40);}
				if(faccia2==6){g.fillOval(310,35,40,40);}
				if(faccia2==3||faccia2==4||faccia2==5||faccia2==6){g.fillOval(370,35,40,40);}
				if(faccia2==1||faccia2==3||faccia2==5){g.fillOval(310,95,40,40);}
				if(faccia2==3||faccia2==4||faccia2==5||faccia2==6){g.fillOval(250,155,40,40);}
				if(faccia2==6){g.fillOval(310,155,40,40);}
				if(faccia2==2||faccia2==4||faccia2==5||faccia2==6){g.fillOval(370,155,40,40);}
				System.out.println("Disegnato2");
			}
			else
			{
				getContentPane().setPreferredSize(dim1);
				pack();
				System.out.println("Finestra rimpicciolita");
			}
		}
		public void rilancia()
		{
			faccia=((int)((Math.random())*6)+1);
			faccia2=((int)((Math.random())*6)+1);
			c=!c;
			System.out.println(faccia);
			repaint();
		}
	}
}
Nel programma c'è un selettore che permette di usare uno oppure due dadi,
e in base a ciò la finestra viene ridimensionata.
Fino a qui funziona tutto.
Quell' else che ho messo esegue il rimpicciolimento della finestra quando c'è un solo dado,
e ho potuto testare grazie al System.out.println che c'è dentro che il codice è eseguito nei momenti giusti. Però dopo che ho inserito quello non funziona più nemmeno il codice che ingrandisce la finestra, lasciandola sempre piccola. Come ho già detto, l'else viene eseguito nei sempre nei momenti giusti.
Allora se il codice viene ignorato, perchè la finestra non si ingrandisce quando serve???
Infatti togliendolo tutto funziona (però ovviamente una volta ingrandita non può più essere rimpicciolita.
Spero che qualcuno mi sappia rispondere.
Grazie per la pazienza,
ciao