Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Апплеты > Предосмотр при рисовании фигуры


Автор: Sadness 20.12.2008, 14:42
Всем привет smile

Заранее извиняюсь за возможно не совсем подходящие имя темы, но не как не мог вспомнить как это правильно называется  smile 

Вообщем есть небольшой апплет который позволяет рисовать фигуры, в даном случае только елипс. Я хочу реализовать возможность предосмотра текущего размера (как например в ОО он отображается штрих - пунктиром)  smile 
Вот сам апплет:
Код

import java.awt.*;
import javax.swing.*;
import java.awt.geom.*;
import java.awt.event.*;
import java.util.*;

/**
 * @author Sadness
 */
public class DrawApp extends JApplet {
    
    public void init() {
        DrawPanel pDraw = new DrawPanel();
        this.add(pDraw);
    }
}

class DrawPanel extends JPanel {
    
    public DrawPanel () {
        
        shapes = new ArrayList<Ellipse2D>();
        addMouseListener(new CoordinateListener());
        addMouseMotionListener(new ChangeCoordinateListener());
    }
       
      public void add (
            double x, double y, 
            double w, double h) {
        this.x = x;
        this.y = y;
        this.w = w;
        this.h = h;

        ellipse = new Ellipse2D.Double (x, y, (w - x), (h -y));
        shapes.add(ellipse);

        repaint();
    }
      
    public void paintComponent(Graphics g) {

        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D) g;
        for (int ix = 0; ix < shapes.size(); ix++) {
             g2.fill(shapes.get(ix));
        }
     }
      
  private class CoordinateListener extends MouseAdapter {
        
          public void mousePressed(MouseEvent event) {
              x = event.getX();
              y = event.getY();
          }
          
          public void mouseReleased(MouseEvent event) {
              
                  w = tempX;
                  h = tempY;
                  add(x, y, w, h);
                  repaint();
          }
    }
    
    private class ChangeCoordinateListener extends MouseMotionAdapter {
        
          public void mouseDragged(MouseEvent event) { 
              
              tempX = event.getX();
              tempY = event.getY();
              
              // Тут пытаюсь сделать этот педосмотр :}
              Graphics g = getGraphics();
              Graphics2D g2 = (Graphics2D)g;
              el = new Ellipse2D.Double(x, y, (tempX - x), (tempY - y));
              g2.setStroke(new BasicStroke(3));
              g2.draw(el);

            repaint();

          }
    }    
  
  private double x, y, w, h;     // координаты
  private double tempX, tempY;   // для хранения измен. координат
  private ArrayList<Ellipse2D> shapes;  // массив фигур 
  private Ellipse2D ellipse;
  private Ellipse2D el;
}


Так вот, контуры будущей фигуры как бы отображаются, но очень сильно мигают. Подскажите пожалуйста как исправить если я вообще правильно делал smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)