Sto scrivendo un programma seguendo le forume che da il mio libro ma il frattale disegnato è completamente diverso. Secondo voi perchè? Ecco il codice:
Prima classe
codice:
import java.awt.*;
import javax.swing.*;

public class FractalJPanel extends JPanel{
	private Color color;
	private int level;
	
	private final int WIDTH=400;
	private final int HEIGHT=400;
	
	public FractalJPanel(int currentLevel)
	{
		color=Color.BLUE;
		level=currentLevel;
		setBackground(Color.WHITE);
		setPreferredSize(new Dimension(WIDTH, HEIGHT));
	}
	
	public void drawFractal(int level, int xA, int xB,int yA, int yB, Graphics g)
	{
		if(level==0)
			g.drawLine(xA,yA,xB,yB);
		else
		{
			int xC=(xA+xB)/2;
			int yC=(yA+yB)/2;
			
			int xD=xA+(xC-xA)/2-(yC-yA)/2;
			int yD=yA+(yC-yA)/2+(xC-xA)/2;
			
			drawFractal(level-1,xD,yD,xA,yA,g);
			drawFractal(level-1,xD,yD,xC,yC,g);
			drawFractal(level-1,xD,yD,xB,yB,g);
		}
	}
	
	public void paintComponent(Graphics g)
	{
		super.paintComponent(g);
		g.setColor(color);
		drawFractal(level,100,90,290,200,g);
	}
	
	public void setColor(Color c)
	{
		color=c;
	}
	
	public void setLevel(int currentLevel)
	{
		level=currentLevel;
	}
	
	public int getLevel()
	{
		return level;
	}
}
Seconda classe
codice:
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.*;

public class Fractal extends JFrame
{
	private final int WIDTH=400;
	private final int HEIGHT=480;
	private final int MIN_LEVEL=0, MAX_LEVEL=15;
	private Color color=Color.BLUE;
	
	private JButton changeColorJButton,increaseLevelJButton,decreaseLevelJButton;
	private JLabel levelJLabel;
	private FractalJPanel drawSpace;
	private JPanel mainJPanel,controlJPanel;
	
	public Fractal(){
		super("Fractal");
		controlJPanel=new JPanel();
		controlJPanel.setLayout(new FlowLayout());
		
		changeColorJButton=new JButton("Colore");
		controlJPanel.add(changeColorJButton);
		changeColorJButton.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent event)
			{
				color=JColorChooser.showDialog(Fractal.this,"Scegli un colore",color);
				if(color==null)
					color=Color.BLUE;
				drawSpace.setColor(color);
			}				
		});
		
		decreaseLevelJButton=new JButton("Decrementa Livello");
		controlJPanel.add(decreaseLevelJButton);
		decreaseLevelJButton.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent event)
			{
				int level=drawSpace.getLevel();
				level--;
				if((level>=MIN_LEVEL)&&(level<=MAX_LEVEL))
				{
					levelJLabel.setText("Livello: "+level);
					drawSpace.setLevel(level);
					repaint();
				}
			}
		});
		
		increaseLevelJButton=new JButton("Aumenta livello");
		controlJPanel.add(increaseLevelJButton);
		increaseLevelJButton.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent event)
			{
				int level=drawSpace.getLevel();
				level++;
				if((level>=MIN_LEVEL)&&(level<=MAX_LEVEL))
				{
					levelJLabel.setText("Livello: "+level);
					drawSpace.setLevel(level);
					repaint();
				}
			}
		});
		
		levelJLabel=new JLabel("Livello: 0");
		controlJPanel.add(levelJLabel);
		
		drawSpace= new FractalJPanel(0);
		
		mainJPanel=new JPanel();
		mainJPanel.add(controlJPanel);
		mainJPanel.add(drawSpace);
		
		add(mainJPanel);
		
		setSize(WIDTH,HEIGHT);
		setVisible(true);
	}
	
	public static void main(String args[])
	{
		Fractal demo=new Fractal();
		demo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
}