import javax.swing.*;
import javax.swing.event.*;
import javax.swing.border.*;
import java.lang.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
import EqPanel;
import EqAfin;
import Punto;
public class Fractal extends JFrame
{
EqPanel[] ep = new EqPanel[32];
BufferedImage frac;
JScrollPane sp;
JPanel jp;
JButton GenFract;
JButton GuaFract;
JButton CarFract;
JButton GuaImg;
int numeq=4;
JSlider NumEq;
JLabel VNumEq;
String TS1=new String("");
String TS2=new String("");
JTextField Y0;
JTextField X0;
JTextField N;
JTextField X;
JTextField Y;
JTextField W;
JTextField H;
JTextField DimX;
JTextField DimY;
public Fractal(String name)
{
super(name);
Container cp = getContentPane();
cp.setLayout(null);
Insets i = cp.getInsets();
jp = new JPanel();
sp = new JScrollPane(jp);
sp.setPreferredSize(new Dimension(400,200));
jp.setLayout(new FlowLayout());
sp.setVerticalScrollBarPolicy(sp.VERTICAL_SCROLLBAR_ALWAYS);
sp.setHorizontalScrollBarPolicy(sp.HORIZONTAL_SCROLLBAR_NEVER);
cp.add(sp);
sp.setBounds(25,275,475,155);
GenFract = new JButton("Generar Fractal");
GenFract.addActionListener(AGenFract);
GuaFract = new JButton("Guardar Fractal");
GuaFract.setEnabled(false);
//GuaFract.addActionListener();
CarFract = new JButton("Cargar Fractal");
CarFract.setEnabled(false);
//CarFract.addActionListener();
GuaImg = new JButton("Guardar Imagen");
GuaImg.setEnabled(false);
GuaImg.addActionListener(AGuaImg);
cp.add(GenFract);
GenFract.setBounds(50,25,125,50);
cp.add(GuaImg);
GuaImg.setBounds(200,25,125,50);
cp.add(GuaFract);
GuaFract.setBounds(350,25,125,25);
cp.add(CarFract);
CarFract.setBounds(350,50,125,25);
JLabel[] Parm=new JLabel[8];
for (int k=0;k<6;k++)
{
Character c=new Character((char)(65+k));
Parm[k]=new JLabel(c.toString());
cp.add(Parm[k]);
Parm[k].setBounds(55*k+35,250,55,25);
Parm[k].setHorizontalAlignment(JLabel.CENTER);
}
Parm[6]=new JLabel("Prob");
cp.add(Parm[6]);
Parm[6].setBounds(365,250,55,25);
Parm[6].setHorizontalAlignment(JLabel.CENTER);
Parm[7]=new JLabel("Color");
cp.add(Parm[7]);
Parm[7].setBounds(420,250,55,25);
Parm[7].setHorizontalAlignment(JLabel.CENTER);
JPanel opt = new JPanel();
opt.setLayout(new FlowLayout(FlowLayout.LEFT));
opt.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createTitledBorder("Opciones"),BorderFactory.createEmptyBorder(0,0,0,0)));
cp.add(opt);
opt.setBounds(25,100,300,150);
opt.add(new JLabel("Posición Inicial: ("));
X0=new JTextField("0",3);
opt.add(X0);
opt.add(new JLabel(","));
Y0=new JTextField("0",3);
opt.add(Y0);
opt.add(new JLabel(")"));
opt.add(new JLabel(" "));
opt.add(new JLabel("Total de puntos:"));
N=new JTextField("480000",10);
opt.add(N);
opt.add(new JLabel(" "));
opt.add(new JLabel("Eje X: ["));
X=new JTextField("-4",3);
opt.add(X);
opt.add(new JLabel(","));
W=new JTextField("6",3);
opt.add(W);
opt.add(new JLabel("]"));
opt.add(new JLabel(" "));
opt.add(new JLabel("Eje Y: ["));
Y=new JTextField("0",3);
opt.add(Y);
opt.add(new JLabel(","));
H=new JTextField("10",3);
opt.add(H);
opt.add(new JLabel("]"));
opt.add(new JLabel("Imagen:"));
DimX=new JTextField("800",4);
opt.add(DimX);
opt.add(new JLabel("x"));
DimY=new JTextField("600",4);
opt.add(DimY);
NumEq = new JSlider(JSlider.VERTICAL, 1, 32, 4);
NumEq.addChangeListener(SlNe);
NumEq.setMajorTickSpacing(10);
NumEq.setMinorTickSpacing(1);
NumEq.setPaintTicks(true);
NumEq.setPaintLabels(true);
NumEq.setSnapToTicks(true);
NumEq.setInverted(true);
NumEq.setBorder(BorderFactory.createEmptyBorder(0,0,10,0));
cp.add(NumEq);
NumEq.setBounds(350,100,25,150);
JLabel VNumEqt=new JLabel("Ecuaciones:");
VNumEqt.setHorizontalAlignment(JLabel.CENTER);
cp.add(VNumEqt);
VNumEqt.setBounds(375,100,100,50);
VNumEq=new JLabel(TS1+numeq+TS2);
VNumEq.setHorizontalAlignment(JLabel.CENTER);
cp.add(VNumEq);
VNumEq.setBounds(375,150,100,50);
for (int k=0;k<32;k++)
{
ep[k]= new EqPanel(new EqAfin(0,0,0,0,0,0,0,Color.black));
}
ep[0]= new EqPanel(new EqAfin(0,0,0,1311,0,0,819,Color.red));
ep[1]= new EqPanel(new EqAfin(6144,328,-328,6963,0,13107,6062,Color.blue));
ep[2]= new EqPanel(new EqAfin(1638,-2130,1884,1802,0,13107,655,Color.yellow));
ep[3]= new EqPanel(new EqAfin(-1229,2294,2130,1966,0,3604,655,Color.green));
jp.add(ep[0]);
jp.add(ep[1]);
jp.add(ep[2]);
jp.add(ep[3]);
jp.setPreferredSize(new Dimension(400,(int)(5+numeq*(5+ep[0].getPreferredSize().getHeight()))));
}
public static void main(String[] args)
{
JFrame frame = new Fractal("Generador de Fractales IFS");
frame.addWindowListener(
new WindowAdapter() {
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
frame.setBounds(50,50,525,475);
frame.setVisible(true);
frame.setResizable(false);
}
ChangeListener SlNe =
new ChangeListener()
{
public void stateChanged(ChangeEvent evento)
{
int num=(int)(NumEq.getValue());
VNumEq.setText(TS1+num+TS2);
if (num>numeq)
for (int i=numeq;i0 && a0 && bnumP && j<(numP/100))
break;
}
JFrame F=new JFrame("Fractal");
JLabel I=new JLabel(new ImageIcon((Image)frac));
F.getContentPane().add(I);
F.setBounds(100,100,dimX,dimY);
F.setVisible(true);
}
};
ActionListener AGuaImg =
new ActionListener()
{
public void actionPerformed(ActionEvent evento)
{
if (frac !=null)
{
final JFileChooser fc = new JFileChooser();
//FileFilter filter=new FileFilter();
//filter.addExtension("gif");
//fc.setFileFilter(new FileFilter("gif"));
int returnVal = fc.showSaveDialog(Fractal.this);
if (returnVal == JFileChooser.APPROVE_OPTION)
{
File file = fc.getSelectedFile();
}
}
}
};
}