Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- So am trying to retrieve the coordinates of a line 2D that i will draw on my JPanel. The getBounds() method seemed to work for a rectangle2D but is not appripriate for a line2D.. How can i get the the coordinates of a line2D and put them in a variable as i did for the rectangle2D below:
- private Line2D.Float drawLine(int x1, int y1, int x2, int y2) {
- return new Line2D.Float(x1, y1, x2, y2);
- }
- This is where i want to get the coordinates inside variables.
- if(var>1){
- for(int i=0;i<var-1;i++){
- Shape s = shapes.get(i);
- double x1 = (s.getBounds2D().getX1());
- double y1 = (s.getBounds2D().getY1());
- double x2 = (s.getBounds2D().getX2());
- double y2 = (s.getBounds2D().getY2());
- }
- }
- Can anyone help me out ?
- So am trying to retrieve the coordinates of a line 2D that i will draw on my JPanel. The getBounds() method seemed to work for a rectangle2D but is not appripriate for a line2D.. How can i get the the coordinates of a line2D and put them in a variable as i did for the rectangle2D below: Here is my entire code!
- import java.awt.AlphaComposite;
- import java.awt.BasicStroke;
- import java.awt.BorderLayout;
- import java.awt.Color;
- import java.awt.Dimension;
- import java.awt.Graphics;
- import java.awt.Graphics2D;
- import java.awt.Point;
- import java.awt.Rectangle;
- import java.awt.RenderingHints;
- import java.awt.Shape;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.awt.event.MouseAdapter;
- import java.awt.event.MouseEvent;
- import java.awt.event.MouseMotionAdapter;
- import java.awt.geom.Ellipse2D;
- import java.awt.geom.Line2D;
- import java.awt.geom.Rectangle2D;
- import java.awt.image.BufferedImage;
- import java.io.File;
- import java.io.IOException;
- import java.io.OutputStream;
- import java.io.OutputStreamWriter;
- import java.io.Writer;
- import java.text.DecimalFormat;
- import java.util.ArrayList;
- import java.util.Iterator;
- import java.util.Scanner;
- import javax.imageio.ImageIO;
- import javax.swing.Box;
- import javax.swing.Icon;
- import javax.swing.ImageIcon;
- import javax.swing.JButton;
- import javax.swing.JColorChooser;
- import javax.swing.JComponent;
- import javax.swing.JFileChooser;
- import javax.swing.JFrame;
- import javax.swing.JLabel;
- import javax.swing.JMenu;
- import javax.swing.JMenuBar;
- import javax.swing.JMenuItem;
- import javax.swing.JOptionPane;
- import javax.swing.JPanel;
- import javax.swing.JSeparator;
- import javax.swing.JSlider;
- import javax.swing.JTextField;
- import javax.swing.SwingConstants;
- import javax.swing.event.ChangeEvent;
- import javax.swing.event.ChangeListener;
- import javax.swing.filechooser.FileNameExtensionFilter;
- public class Test extends JFrame {
- private int len;
- // public int getSizes(){
- // return len;
- //}
- private static final long serialVersionUID = -140274271716086522L;
- JMenuBar menubar;
- JMenu File, Exit;
- JMenuItem New, Open;
- JComponent DrawingBoard;
- JButton lineBut, ellipseBut, rectBut, strokeBut;
- DecimalFormat dec = new DecimalFormat("#.##");
- // Contains all of the rules for drawing
- Graphics2D graphSettings;
- // Going to be used to monitor what shape to draw next
- int currentAction = 1;
- // Transparency of the shape
- // Default stroke and fill colors
- Color strokeColor = Color.BLACK;
- public static void main(String[] args) {
- new Test();
- }
- public Test() {
- // Define the defaults for the JFrame
- this.setSize(800, 600);
- this.setTitle("ERD BUILDER");
- this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- this.setJMenuBar(menubar);
- JMenuBar menuBar = new JMenuBar();
- // Add the menubar to the frame
- setJMenuBar(menuBar);
- // Define and add two drop down menu to the menubar
- JMenu fileMenu = new JMenu("File");
- JMenu editMenu = new JMenu("Edit");
- JMenu dbMenu = new JMenu("Database");
- JMenu ToolsMenu = new JMenu("Tools");
- JMenu HelpMenu = new JMenu("Help");
- menuBar.add(fileMenu);
- menuBar.add(editMenu);
- menuBar.add(dbMenu);
- menuBar.add(ToolsMenu);
- menuBar.add(HelpMenu);
- // Create and add simple menu item to one of the drop down menu
- JMenuItem newAction = new JMenuItem("New Project");
- JMenuItem openAction = new JMenuItem("Open File");
- JMenuItem exitAction = new JMenuItem("Quit");
- JMenuItem cutAction = new JMenuItem("Cut");
- JMenuItem copyAction = new JMenuItem("Copy");
- JMenuItem pasteAction = new JMenuItem("Paste");
- JMenuItem UndoAction = new JMenuItem("Undo");
- JMenuItem RedoAction = new JMenuItem("Redo");
- JMenuItem clearAction = new JMenuItem("Clear");
- JMenuItem saveAction = new JMenuItem("Save");
- JMenuItem exportAction = new JMenuItem("Export");
- JMenuItem printAction = new JMenuItem("Print");
- JMenuItem ConvertAction = new JMenuItem("Convert To Tables");
- JMenuItem ColorAction = new JMenuItem("Color Picker");
- JMenuItem ZoomAction = new JMenuItem("Zoom");
- JMenuItem EntityAction = new JMenuItem("Entity & Attributes");
- JMenuItem RelationshipAction = new JMenuItem("Relationship Attributes");
- JMenuItem HelpAction = new JMenuItem("Help");
- JMenuItem AboutAction = new JMenuItem("About");
- fileMenu.add(newAction);
- fileMenu.addSeparator();
- fileMenu.add(openAction);
- fileMenu.addSeparator();
- fileMenu.add(saveAction);
- fileMenu.addSeparator();
- fileMenu.add(exportAction);
- fileMenu.addSeparator();
- fileMenu.add(printAction);
- fileMenu.addSeparator();
- fileMenu.add(exitAction);
- editMenu.add(UndoAction);
- editMenu.addSeparator();
- editMenu.add(RedoAction);
- editMenu.addSeparator();
- editMenu.add(cutAction);
- editMenu.addSeparator();
- editMenu.add(copyAction);
- editMenu.addSeparator();
- editMenu.add(pasteAction);
- editMenu.addSeparator();
- editMenu.add(clearAction);
- dbMenu.add(ConvertAction);
- ToolsMenu.add(ColorAction);
- ToolsMenu.addSeparator();
- ToolsMenu.add(ZoomAction);
- ToolsMenu.addSeparator();
- ToolsMenu.add(EntityAction);
- ToolsMenu.addSeparator();
- ToolsMenu.add(RelationshipAction);
- HelpMenu.add(HelpAction);
- HelpMenu.addSeparator();
- HelpMenu.add(AboutAction);
- exitAction.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent arg0) {
- }}
- );
- ConvertAction.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent arg0) {
- new ConvertForm().setVisible(true);
- }}
- );
- newAction.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent arg0) {
- new Test().setVisible(true);
- }
- });
- JPanel buttonPanel = new JPanel();
- JPanel FieldPanel = new JPanel();
- // Swing box that will hold all the buttons
- Box theBox = Box.createVerticalBox();
- Box theBoxs = Box.createVerticalBox();
- // Make all the buttons in makeMeButtons by passing the
- // button icon.
- lineBut = makeMeButtons("./src/line.png", 2);
- ellipseBut = makeMeButtons("./src/ellipse.png", 3);
- rectBut = makeMeButtons("./src/rectangle.png", 4);
- // Make all the buttons in makeMeColorButton by passing the
- // button icon and true for stroke color or false for fill
- strokeBut = makeMeColorButton("./src/stroke.png", 5, true);
- // Add the fields to the boxs
- //theBox.add(brushBut);
- theBox.add(lineBut);
- theBox.add(ellipseBut);
- theBox.add(rectBut);
- theBox.add(strokeBut);
- buttonPanel.add(theBox);
- FieldPanel.add(theBoxs);
- this.add(buttonPanel, BorderLayout.WEST);
- this.add(FieldPanel, BorderLayout.EAST);
- buttonPanel.setPreferredSize(new Dimension(200,480));
- FieldPanel.setPreferredSize(new Dimension(200,480));
- // Make the drawing area take up the rest of the frame
- // this.add(new DrawingBoard(), BorderLayout.CENTER);
- final DrawingBoard drawPanel = new DrawingBoard();
- this.add(drawPanel, BorderLayout.CENTER);
- this.getContentPane().setBackground(Color.WHITE);
- exportAction.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent arg0) {
- BufferedImage image = new BufferedImage(drawPanel.getWidth(),
- drawPanel.getHeight(), BufferedImage.TYPE_INT_ARGB);
- Graphics2D g = image.createGraphics();
- drawPanel.paint(g);
- g.dispose();
- JFileChooser fileChooser = new JFileChooser();
- File theDirectory = new File("C:/Users/Wenda/Desktop");
- fileChooser.setCurrentDirectory(theDirectory);
- FileNameExtensionFilter pngFilter = new FileNameExtensionFilter(
- "PNG file (*.png)", "png");
- fileChooser.addChoosableFileFilter(pngFilter);
- fileChooser.setFileFilter(pngFilter);
- int status = fileChooser.showSaveDialog(Test.this);
- if (status == JFileChooser.APPROVE_OPTION) {
- try {
- ImageIO.write(image, "png",
- fileChooser.getSelectedFile());
- JOptionPane.showMessageDialog(null, "Image saved to "
- + fileChooser.getSelectedFile().getName());
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- }
- }
- });
- // Show the frame
- this.setVisible(true);
- }
- public JButton makeMeButtons(String iconFile, final int actionNum) {
- JButton theBut = new JButton();
- Icon butIcon = new ImageIcon(iconFile);
- theBut.setIcon(butIcon);
- theBut.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- currentAction = actionNum;
- }
- });
- return theBut;
- }
- // Spits out buttons based on the image supplied and
- // whether a stroke or fill is to be defined
- public JButton makeMeColorButton(String iconFile, final int actionNum,
- final boolean stroke) {
- JButton theBut = new JButton();
- Icon butIcon = new ImageIcon(iconFile);
- theBut.setIcon(butIcon);
- theBut.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- if (stroke) {
- // JColorChooser is a popup that lets you pick a color
- strokeColor = JColorChooser.showDialog(null,
- "Pick a Stroke", Color.BLACK);
- } else {
- }
- }
- });
- return theBut;
- }
- public class DrawingBoard extends JComponent {
- private static final long serialVersionUID = -4431176095451940075L;
- // ArrayLists that contain each shape drawn along with
- // that shapes stroke and fill
- ArrayList<Shape> shapes = new ArrayList<Shape>();
- ArrayList<Color> shapeStroke = new ArrayList<Color>();
- ArrayList<Integer> count = new ArrayList<Integer>();
- Point drawStart, drawEnd;
- // Monitors events on the drawing area of the frame
- public DrawingBoard() {
- this.addMouseListener(new MouseAdapter() {
- public void mousePressed(MouseEvent e) {
- if (currentAction != 1) {
- // When the mouse is pressed get x & y position
- drawStart = new Point(e.getX(), e.getY());
- drawEnd = drawStart;
- repaint();
- }
- }
- public void mouseReleased(MouseEvent e) {
- int counts =0;
- if (currentAction != 1) {
- Shape aShape = null;
- if (currentAction == 2) {
- aShape = drawLine(drawStart.x, drawStart.y,
- e.getX(), e.getY());
- shapes.add(aShape);
- int var = shapes.size();
- System.out.println("Array index (LINE)"+var);
- if(var>1){
- for(int i=0;i<var-1;i++){
- Shape st = shapes.get(var-1);
- Shape s = shapes.get(i);
- double x1 = (s.getBounds2D().getX());
- double y1 = (s.getBounds2D().getY());
- double x2 = (s.getBounds2D().getWidth());
- double y2 = (s.getBounds2D().getHeight());
- }
- }
- shapeStroke.add(strokeColor);
- drawStart = null;
- drawEnd = null;
- repaint();
- }
- else
- if (currentAction == 4) {
- boolean collision = false;
- // Create a new rectangle using x & y coordinates
- aShape = drawRectangle(drawStart.x, drawStart.y,
- e.getX(), e.getY());
- int var = shapes.size();
- System.out.println("Array index"+var);
- if(var>1){
- //look for collisions between shapes
- for(int i=0;i<var-1;i++){
- Shape st = shapes.get(var-1);
- Shape s = shapes.get(i);
- double x = (s.getBounds2D().getX());
- double y = (s.getBounds2D().getY());
- double w = (s.getBounds2D().getWidth());
- double h = (s.getBounds2D().getHeight());
- if(st.intersects(x+7, y+7, w+7, h+7)){
- collision = true;
- System.out.println("it collides with "+i);
- }
- else{
- collision = false;
- System.out.println("NO COLLISION with " +i);
- }
- }
- }
- shapeStroke.add(strokeColor);
- drawStart = null;
- drawEnd = null;
- repaint();
- //new EntityForm().setVisible(true);
- }
- }
- }
- });
- this.addMouseListener(new MouseAdapter() {
- @Override
- public void mouseClicked(MouseEvent me) {
- JTextField name = new JTextField(15);
- super.mouseClicked(me);
- for (Shape s : shapes) {
- if (s.contains(me.getPoint())) {//check if mouse is clicked within shape
- //we can either just print out the object class name
- System.out.println("Clicked a "+s.getClass().getName());
- //or check the shape class we are dealing with using instance of with nested if
- if (s instanceof Rectangle2D) {
- //create table
- }
- else if (s instanceof Ellipse2D) {
- }
- }
- }
- }
- });
- this.addMouseMotionListener(new MouseMotionAdapter() {
- public void mouseDragged(MouseEvent e) {
- // If this is a brush have shapes go on the screen quickly
- if (currentAction == 1) {
- int x = e.getX();
- int y = e.getY();
- Shape aShape = null;
- shapes.add(aShape);
- shapeStroke.add(strokeColor);
- // Add the transparency value
- }
- // Get the final x & y position after the mouse is dragged
- drawEnd = new Point(e.getX(), e.getY());
- repaint();
- }
- });
- }
- public void paint(Graphics g) {
- // Class used to define the shapes to be drawn
- graphSettings = (Graphics2D) g;
- // Antialiasing cleans up the jagged lines and defines rendering
- // rules
- graphSettings.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
- RenderingHints.VALUE_ANTIALIAS_ON);
- // Defines the line width of the stroke
- graphSettings.setStroke(new BasicStroke(4));
- // Iterators created to cycle through strokes and fills
- Iterator<Color> strokeCounter = shapeStroke.iterator();
- for (Shape s : shapes) {
- // Grabs the next stroke from the color arraylist
- graphSettings.setPaint(strokeCounter.next());
- graphSettings.draw(s);
- }
- // Guide shape used for drawing
- if (drawStart != null && drawEnd != null) {
- // Makes the guide shape transparent
- graphSettings.setComposite(AlphaComposite.getInstance(
- AlphaComposite.SRC_OVER, 0.40f));
- // Make guide shape gray for professional look
- graphSettings.setPaint(Color.LIGHT_GRAY);
- Shape aShape = null;
- if (currentAction == 2) {
- aShape = drawLine(drawStart.x, drawStart.y, drawEnd.x,
- drawEnd.y);
- } else
- if (currentAction == 4) {
- aShape = drawRectangle(drawStart.x, drawStart.y, drawEnd.x,
- drawEnd.y);
- }
- graphSettings.draw(aShape);
- }
- }
- private Rectangle2D.Float drawRectangle(int x1, int y1, int x2, int y2) {
- // Get the top left hand corner for the shape
- // Math.min returns the points closest to 0
- int x = Math.min(x1, x2);
- int y = Math.min(y1, y2);
- // Gets the difference between the coordinates and
- int width = Math.abs(x1 - x2);
- int height = Math.abs(y1 - y2);
- return new Rectangle2D.Float(x, y, width, height);
- }
- private Line2D.Float drawLine(int x1, int y1, int x2, int y2) {
- return new Line2D.Float(x1, y1, x2, y2);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment