Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2012, 20:55   #1
Mcduff
Пользователь
 
Регистрация: 31.10.2011
Сообщений: 27
Печаль Java нужно сделать пэйнт

Код:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;

public class Kimp extends JFrame {
	

        abstract class Shape {
                public Color color = Color.BLACK;
               
                public boolean selected;
               
                public abstract Shape copy();
               
                protected void copyHelper(Shape s) {
                        s.selected = selected;
                        s.color = new Color(color.getRGB());
                }
               
                public abstract void draw(Point p);
                public abstract void move(int dx, int dy);
               
                public void paint(Graphics g) {
                        if (selected) {
                                g.setColor(Color.RED);
                        } else {
                                g.setColor(color);
                        }
                }
               
                public abstract int getDistance(Point p);
        }
       class Rectangle extends Shape {
                public Point start;
                public Point end;
               
                public Rectangle() {
                       
                }

                public Rectangle(Point p) {
                        start = p;
                }
               

             
               

                @Override
                public void paint(Graphics g) {
                        super.paint(g);
                        
              
                        	   g.drawRect(start.x, start.y, end.x, end.y);
                        	   
                 
                
                   
                }
                
                @Override
                public Rectangle copy() {
                        Rectangle r = new Rectangle();
                        copyHelper(r);
                        r.start = new Point(start.x, start.y);
                        r.end = new Point(end.x, end.y);
                       
                        return r;
                }

                @Override
                public void draw(Point p) {
                        end = p;                        
                }

                @Override
                public int getDistance(Point p) {
                        int d1 = (int) p.distance(start);
                        int d2 = (int) p.distance(end);
                        return Math.min(d1, d2);
                }

                @Override
                public void move(int dx, int dy) {
                        start.x += dx;
                        start.y += dy;
                        end.x += dx;
                        end.y += dy;
                }
               
               
               
        }
Mcduff вне форума Ответить с цитированием
Старый 17.12.2012, 20:56   #2
Mcduff
Пользователь
 
Регистрация: 31.10.2011
Сообщений: 27
По умолчанию

Код:
class ShapeList {
                ArrayList<ArrayList<Shape>> shapes = new ArrayList<ArrayList<Shape>>();
               
                int stateIndex = 0;
               
                public ShapeList() {
                        shapes.add(new ArrayList<Shape>());
                }
               
                public ArrayList<Shape> getShapes() {
                        return shapes.get(stateIndex);
                }
                public void addShape(Shape s) {
                        newState();
                        shapes.get(stateIndex).add(s);
                }
               
                public void newState() {
                        int shapesSize = shapes.size();
                        for (int i = shapesSize - 1; i > stateIndex; i--) {
                                shapes.remove(i);
                        }
                        // copy elements
                        shapes.add(new ArrayList<Shape>());
                        ArrayList<Shape> newState = shapes.get(stateIndex + 1);
                        for (Shape s : getShapes()) {
                                newState.add(s.copy());
                        }
                        this.stateIndex++;
                }
               
                public Shape getLastShape() {
                        int size = shapes.get(stateIndex).size();
                        if (size > 0) {
                                return shapes.get(stateIndex).get(size - 1);
                        }
                        return null;
                }
               
                public Shape getSelectedShape() {
                        System.out.println("state:" + stateIndex);
                        for (Shape s : getShapes()) {
                                if (s.selected) return s;
                        }
                        return null;
                }
               
                public boolean undo() {
                        if (stateIndex > 0) {
                                stateIndex--;
                                return true;
                        }
                        return false;
                }
               
                public boolean redo() {
                        if (stateIndex < shapes.size() - 1) {
                                stateIndex++;
                                return true;
                        }
                        return false;
                }
               
                public void select(Point p) {
                        unselectAll();
                        int minDist = 1000;
                        Shape closeShape = null;
                        for (Shape s : getShapes()) {
                                int dist = s.getDistance(p);
                                if (dist < minDist) {
                                        minDist = dist;
                                        closeShape = s;
                                }
                        }
                        if (closeShape != null) {
                                closeShape.selected = true;
                        }
                }
               
                public void unselectAll() {
                        for (Shape s : getShapes()) {
                                s.selected = false;
                        }
                }
        }
       
        public ShapeList shapeList = new ShapeList();
       
        public boolean selectMode = false;
        public Point lastPoint = null;
        /**
         * @param args
         */
Mcduff вне форума Ответить с цитированием
Старый 17.12.2012, 21:00   #3
Mcduff
Пользователь
 
Регистрация: 31.10.2011
Сообщений: 27
По умолчанию

Код:
 public static void main(String[] args) {
                Kimp k = new Kimp();
        }
       
        public Kimp() {
                this.setTitle("Blah");
                this.setSize(800, 600);
                this.setVisible(true);
                this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
               
                this.addMouseListener(new MouseAdapter() {
                        @Override
                        public void mousePressed(MouseEvent e) {
                                // TODO Auto-generated method stub
                                super.mousePressed(e);
                               
                                if (selectMode) {
                                        shapeList.newState();
                                        lastPoint = e.getPoint();
                                } else {
                                      
                                                Rectangle r = new Rectangle(e.getPoint());
                                                
                                                
                                                shapeList.addShape(r);
                                                
                                      
                                        repaint();
                                }
                        }
                });
                
                this.addMouseMotionListener(new MouseMotionAdapter() {
                	int xvalue = -10, yvalue = -10;
                        public void mouseDragged(MouseEvent e) {
                                super.mouseDragged(e);
                                
                                
                              
                                if (selectMode) {
                                	  
                                        Shape s = shapeList.getSelectedShape();
                                        if (s != null) {
                                        	
                                                System.out.println("jee");
                                                s.move(e.getPoint().x - lastPoint.x, e.getPoint().y - lastPoint.y);

                                             
                                                repaint();
                                        }
                                        lastPoint = e.getPoint();
                                } else {
                                        Shape s = shapeList.getLastShape();
                                        if (s != null) {
                                        	 s.draw(e.getPoint());  
                                                System.out.println( e.getPoint());
                                              
                                                repaint();
                                        }
                                }
                        }
                       
                        @Override
                        public void mouseMoved(MouseEvent e) {
                                // TODO Auto-generated method stub
                                super.mouseMoved(e);
                               
                                if (selectMode) {
                                        shapeList.select(e.getPoint());
                                        repaint();
                                }
                        }
                });
нужно сделать пэйнт (рисование кистью или карандашом), т.е. когда отпускается мышь - перестает рисовать, или хотя бы максимально упростить код. Прошу помощи.
Mcduff вне форума Ответить с цитированием
Старый 17.12.2012, 21:01   #4
Mcduff
Пользователь
 
Регистрация: 31.10.2011
Сообщений: 27
По умолчанию

Код:
this.addKeyListener(new KeyAdapter() {
                        @Override
                        public void keyPressed(KeyEvent e) {
                                // TODO Auto-generated method stub
                                super.keyPressed(e);
                               
                                if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {
                                        boolean undone = shapeList.undo();
                                        if (!undone) {
                                        	  int result = JOptionPane.showConfirmDialog(null, "Exit?", "confirmation", JOptionPane.YES_NO_OPTION);
                                              if (result == JOptionPane.YES_OPTION) {
                                                      System.exit(0);
                                              }

                                        }
                                        repaint();
                                }
                               
                                if (e.getKeyCode() == KeyEvent.VK_SPACE) {
                                        shapeList.redo();
                                        repaint();
                                }
                               
                                if (e.getKeyCode() == KeyEvent.VK_CONTROL) {
                                        selectMode = true;
                                }
                        }
                       
                        @Override
                        public void keyReleased(KeyEvent e) {
                                // TODO Auto-generated method stub
                                super.keyReleased(e);
                                if (e.getKeyCode() == KeyEvent.VK_CONTROL) {
                                        selectMode = false;
                                        shapeList.unselectAll();
                                }
                        }
                });
        }
       
        protected void drawLine(int x, Object repaint) {
			// TODO Auto-generated method stub
			
		}

		@Override
        public void paint(Graphics g) {
                // TODO Auto-generated method stub
                super.paint(g);
               
                for (Shape s : shapeList.getShapes()) {
                        s.paint(g);
                }
        }

}
Mcduff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
нужно создать объекты(проект) на java BlackFantom Общие вопросы по Java, Java SE, Kotlin 0 22.04.2012 18:58
нужно создать объекты(проект) на java BlackFantom Помощь студентам 0 22.04.2012 18:56
Нужно написать Java скрипт grim111 Фриланс 1 30.10.2011 14:46
Java (сделано, нужно просмотреть) monogramm Помощь студентам 2 18.05.2011 21:25
нужно сделать сделать лабу по БД!!! APXAHGEL Фриланс 4 13.12.2010 09:50