/*
* NewClass.java
*
* Created on November 1, 2007, 3:47 PM
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
/**
*
* @author gefeno
*/
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Line2D;
import java.util.Vector;
import javax.swing.ButtonGroup;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.UIManager;
public class NewClass
{
JFrame painting;
JFrame tools;
int drawType;
boolean fill;
Color color;
public NewClass()
{
JFrame drawFrame = new JFrame("Draw");
drawFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
drawFrame.getContentPane().add(new ControlPanel(), BorderLayout.CENTER);
drawFrame.pack();
drawFrame.setVisible(true);
JFrame toolFrame = new JFrame("Draw");
toolFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
toolFrame.getContentPane().add(new DrawPanel(), BorderLayout.CENTER);
toolFrame.pack();
toolFrame.setVisible(true);
}
public static void main(String[] args) throws Exception
{
// Ask for window decorations provided by the look and feel.
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
new NewClass();
}
private class ControlPanel extends JPanel
{
// Get rid of this
private static final long serialVersionUID = 1L;
public ControlPanel()
{
this.setPreferredSize(new Dimension(250, 100));
final JRadioButton ovalButton = new JRadioButton("Oval");
ovalButton.setActionCommand("oval");
ovalButton.setSelected(true);
final JRadioButton rectangleButton = new JRadioButton("Rectangle");
rectangleButton.setActionCommand("rectangle");
final JRadioButton lineButton = new JRadioButton("Line");
lineButton.setActionCommand("line");
// Group the radio buttons.
final ButtonGroup group = new ButtonGroup();
group.add(ovalButton);
group.add(rectangleButton);
group.add(lineButton);
ActionListener action = new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
if (e.getActionCommand().equals("oval"))
{
drawType = 0;
}
else if (e.getActionCommand().equals("rectangle"))
{
drawType = 1;
}
else if (e.getActionCommand().equals("line"))
{
drawType = 2;
}
}
};
// Register a listener for the radio buttons.
ovalButton.addActionListener(action);
rectangleButton.addActionListener(action);
lineButton.addActionListener(action);
this.add(ovalButton);
this.add(rectangleButton);
this.add(lineButton);
final JCheckBox check = new JCheckBox("Fill with color");
check.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
fill = check.isSelected();
}
});
this.add(check);
final Color[] colors =
{
Color.black, Color.red, Color.green,
Color.blue, Color.yellow, Color.cyan, Color.magenta };
String[] colorStrings =
{
"Black", "Red", "Green", "Blue",
"Yellow", "Cyan", "Magenta"};
final JComboBox colorList = new JComboBox(colorStrings);
colorList.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
color = colors[colorList.getSelectedIndex()];
}
});
this.add(colorList);
}
}
private class DrawPanel extends JPanel
{
Vector<MyShape> shapes;
private static final long serialVersionUID = 1L;
protected void paintComponent(Graphics g)
{
// TODO Auto-generated method stub
super.paintComponent(g);
}
DrawPanel()
{
this.setPreferredSize(new Dimension(500, 500));
this.setLocation(500, 500);
this.setDoubleBuffered(true);
shapes = new Vector<MyShape>();
this.setBackground(Color.white);
final JPanel me = this;
this.addMouseListener(new MouseListener()
{
int x, y;
public void mouseClicked(MouseEvent arg0)
{
}
public void mouseEntered(MouseEvent arg0)
{
}
public void mouseExited(MouseEvent arg0)
{
}
public void mousePressed(MouseEvent arg0)
{
x = arg0.getX();
y = arg0.getY();
}
public void mouseReleased(MouseEvent arg0)
{
switch (drawType)
{
case 0: // Oval
MyShape oval = new MyShape();
oval.x = Math.min(x, arg0.getX());
oval.y = Math.min(y, arg0.getY());
oval.w = Math.abs(x - arg0.getX());
oval.h = Math.abs(y - arg0.getY());
oval.color = color;
oval.fill = fill;
oval.type = drawType;
shapes.add(oval);
break;
case 1: // Rectangle
MyShape rect = new MyShape();
rect.x = Math.min(x, arg0.getX());
rect.y = Math.min(y, arg0.getY());
rect.w = Math.abs(x - arg0.getX());
rect.h = Math.abs(y - arg0.getY());
rect.color = color;
rect.fill = fill;
rect.type = drawType;
shapes.add(rect);
break;
case 2: // Line
MyShape line = new MyShape();
line.x = x;
line.x2 = arg0.getX();
line.y = y;
line.y2 = arg0.getY();
line.color = color;
line.type = drawType;
shapes.add(line);
break;
}
me.repaint();
}
});
}
public void paint(Graphics g)
{
Graphics2D display = (Graphics2D) g;
for (MyShape shape : shapes)
{
switch (shape.type)
{
case 0: // oval
if (shape.fill)
{
display.setPaint(shape.color);
display.fillOval(shape.x, shape.y, shape.w, shape.h);
}
else
{
display.setColor(shape.color);
display.draw(new Ellipse2D.Double(shape.x, shape.y,
shape.w, shape.h));
}
break;
case 1: // Rectangle
if (shape.fill)
{
display.setPaint(shape.color);
display.fillRect(shape.x, shape.y, shape.w, shape.h);
}
else
{
display.setColor(shape.color);
display.drawRect(shape.x, shape.y, shape.w, shape.h);
}
break;
case 2: // Line
display.setColor(shape.color);
display.draw(new Line2D.Double(shape.x, shape.y, shape.x2,
shape.y2));
break;
}
}
}
private class MyShape
{
int x, y, w, h;
int x2, y2;
Color color;
boolean fill;
int type;
}
}
}