Package generator

Source Code of generator.MetaballGenerator

package generator;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.ButtonGroup;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JToggleButton;
import javax.swing.SwingConstants;
import javax.swing.filechooser.FileFilter;

import basic.CPoint2D;

public class MetaballGenerator extends JFrame implements MouseListener, ActionListener {
 
  private MetaballsPanel result;
  private JSplitPane splitter;
  private JPanel tools;
  private JScrollPane toolsscroller;
 
  private JToggleButton tool_selector;
  private JToggleButton tool_newball;
 
  private JMenuBar menubar;
  private JMenu menu_file;
  private JMenuItem menu_file_new;
  private JMenuItem menu_file_save;
 
  private final int width = 400, height = 400;
  private final double xrange = 5, yrange = 5;
 
  private CPoint2D moving;
 
  public MetaballGenerator() {
    super("Metaballs!");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(700, 500);
   
    Container p = getContentPane();
   
    p.setLayout(new BorderLayout());
   
    splitter = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
    splitter.setResizeWeight(1.0);
   
    result = new MetaballsPanel(width, height, xrange, yrange);
    result.setMinimumSize(new Dimension(width, height));
    result.setHorizontalAlignment(SwingConstants.CENTER);
    result.addMouseListener(this);
    splitter.setLeftComponent(result);
   
    tools = new JPanel();
    tools.setLayout(new GridBagLayout());
    GridBagConstraints c = new GridBagConstraints();
    c.anchor = GridBagConstraints.CENTER;
    toolsscroller = new JScrollPane(tools);
    toolsscroller.setMinimumSize(new Dimension(200,300));
    splitter.setRightComponent(toolsscroller);
   
    p.add(splitter, BorderLayout.CENTER);
   
    tool_selector = new JToggleButton("selector");
    tool_selector.setSelected(true);
    tool_selector.addMouseListener(this);
    tools.add(tool_selector, c);
   
    c.gridy++;
    tool_newball = new JToggleButton("new");
    tool_newball.addMouseListener(this);
    tools.add(tool_newball, c);
   
    ButtonGroup toolgroup = new ButtonGroup();
    toolgroup.add(tool_selector);
    toolgroup.add(tool_newball);
   
    menubar = new JMenuBar();
   
    menu_file = new JMenu("File");
    menubar.add(menu_file);
   
    menu_file_new = new JMenuItem("New");
    menu_file_new.addActionListener(this);
    menu_file.add(menu_file_new);
   
    menu_file_save = new JMenuItem("Save");
    menu_file_save.addActionListener(this);
    menu_file.add(menu_file_save);
   
    setJMenuBar(menubar);
   
    moving = null;
   
    result.clear();
   
    setVisible(true);
  }
 
  public void mousePressed(MouseEvent e) {
    if (e.getSource().equals(result)) {
      if (tool_newball.isSelected()) {
        CPoint2D p = new CPoint2D(e.getX() * (xrange/width) - (xrange/2),
            e.getY() * (yrange/height) - (yrange/2), 1.0);
        result.addPoint(p);
        result.repaint();
        System.out.println("woot");
      } else if (tool_selector.isSelected()) {
       
      }
    }
  }
 
  public void mouseReleased(MouseEvent e) {
   
  }
 
  public void mouseMoved(MouseEvent e) {
   
  }
 
  public void mouseClicked(MouseEvent e) {
    if (e.getSource().equals(tool_selector)) {
      result.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
    } else if (e.getSource().equals(tool_newball)) {
      result.setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
    }
  }

  public void mouseEntered(MouseEvent e) {
    // TODO Auto-generated method stub
   
  }

  public void mouseExited(MouseEvent e) {
    // TODO Auto-generated method stub
   
  }

  public void actionPerformed(ActionEvent e) {
    if (e.getSource().equals(menu_file_new)) {
      result.clear();
    } else if (e.getSource().equals(menu_file_save)) {
      JFileChooser chooser = new JFileChooser();
      chooser.setFileFilter(new GraphicsFileFilter());
      int res = chooser.showSaveDialog(this);
      if (res == JFileChooser.APPROVE_OPTION) {
        File f = chooser.getSelectedFile();
        try {
          ImageIO.write(result.getImage(), "png", f);
        } catch (IOException e1) {
          e1.printStackTrace();
        }
      }
    }
  }
 
  /**
   * @param args
   */
  public static void main(String[] args) {
    MetaballGenerator ide = new MetaballGenerator();
  }
 
  private class GraphicsFileFilter extends FileFilter {
   
    public boolean accept(File f) {
      String fname = f.getName().toLowerCase();
      if (fname.endsWith(".png") || f.isDirectory()) {
        return true;
      }
      return false;
    }
   
    public String getDescription() {
      return "PNG files (*.png)";
    }
  }
TOP

Related Classes of generator.MetaballGenerator

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.