2013-05-06 1 views
0

나는 사용자가 도형을 ComboBox에서 선택하여 패널에 그릴 수 있도록하는 간단한 바지 프로젝트 작업을하고 있습니다. 문제는 사용자가 모양의 유형을 선택하고 모양이 나타나지 않는 패널에 그리는 것입니다. 그것은 300 300 픽셀을, 그러나 당신이 선을 그릴 때, 당신은 (그것을 시작 : 여기 자바에서 마우스로 도형 그리기

당신의 패널이 너무 작

import java.awt.Color; 
import javax.swing.JPanel; 
import java.awt.*; 
import java.awt.event.*; 

public class Shapes extends JPanel { 
    private MyLine[] lines = new MyLine[100]; 
    private MyRectangle[] recs; 
    private MyOval[] ovals; 
    int ShapeType = 0; 

    int LC = 0;// conter for number of lines 
    int RC = 0;// conter for number of rectable 
    int OC = 0;// conter for number of ovals 

    int x1; 
    int y1; 
    int x2; 
    int y2; 

    Shapes() { 

     this.setBackground(Color.WHITE); 
     this.setBounds(0, 100, 300, 300); 
     MouseHandler handler = new MouseHandler(); 
     this.addMouseListener(handler); 
     this.addMouseMotionListener(handler); 

    } 

    public int getShapeType() { 
     return ShapeType; 
    } 

    public void setShapeType(int ShapeType) { 
     this.ShapeType = ShapeType; 
    } 

    private class MouseHandler extends MouseAdapter implements 
      MouseMotionListener { 

     @Override 
     public void mouseClicked(MouseEvent e) { 
      // throw new UnsupportedOperationException("Not supported yet."); 
     } 

     @Override 
     public void mousePressed(MouseEvent e) { 
      x1 = e.getX(); 
      y1 = e.getX(); 
      repaint(); 
      System.out.println(x1 + " " + y1); 
     } 

     @Override 
     public void mouseReleased(MouseEvent e) { 
      x2 = e.getX(); 
      y2 = e.getX(); 
      lines[LC] = new MyLine(x1, y1, x2, y2); 
      LC++; 
      System.out.println(x2 + " " + y2); 
      repaint(); 

     } 

     @Override 
     public void mouseEntered(MouseEvent e) { 
     } 

     @Override 
     public void mouseExited(MouseEvent e) { 
     } 

     @Override 
     public void mouseDragged(MouseEvent e) { 
      x2 = e.getX(); 
      y2 = e.getX(); 
      System.out.println(x2 + " dragged " + y2); 
      repaint(); 
     } 

    } 

    @Override 
    public void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     g.setColor(Color.red); 
     if (ShapeType == 0) { 
      for (int i = 0; i < LC; i++) { 

       lines[i].draw(g); 
      } 
     } 

     if (ShapeType == 1) { 
      for (int i = 0; i < LC; i++) { 
       lines[i].draw(g); 
      } 
     } 

     if (ShapeType == 1) { 
      for (int i = 0; i < LC; i++) { 
       lines[i].draw(g); 
      } 
     } 

    } 
} 

MyLine 클래스 내 패널 클래스

package painter; 

import java.awt.Graphics; 
import java.awt.Color; 

public class MyLine extends MyShape { 
    MyLine(int x1, int y1, int x2, int y2) { 
     this.x1 = x1; 
     this.x2 = x2; 
     this.y1 = y1; 
     this.y2 = y2; 
     this.c = c; 

    } 

    @Override 
    public void draw(Graphics g) { 
     g.setColor(Color.RED); 
     g.drawLine(500, 200, 300, 400); 
    } 

} 
+1

[SSCCE] (http://sscce.org/)에 문제를 재현 할 수있는 짧지 만 컴파일 가능한 예를 주면 도움이됩니다. – Pshemo

답변

0

입니다 당신의 패널의 범위를 벗어났습니다 500200) :

g.drawLine(500, 200, 300, 400); 

가까이 왼쪽 상단 모서리에 그리는 시도 :

g.drawLine(0, 0, 300, 400); 
+0

이제는 작동 중입니다 그래도 도면을 그릴 때 여전히 문제가 생깁니다 그 다음 그리기를 선택합니다. 패널에서 모든 라인이 삭제됩니다. 동일한 패널에 여러 모양을 그릴 수있는 방법은 무엇입니까? 동시에 – M1M6

+0

글쎄, 코드에 여러 가지 오류가 있습니다. paintComponent로 시작해 봅시다 : 어떤 그림 유형이 선택 되더라도 그림을 모두 그려야하기 때문에 필요하지 않습니다. 다음으로 두 개의 if가 같고 (ShapeType == 1을 테스트합니다.) 그리고 선만 그리는 경우 각각에 대해 테스트합니다. 더 많은 도움이 필요하면 코드를 수정하고 코드를 다시 게시하십시오. – Igor

+0

멋지다. 그러면 대답으로 받아 들일 수있다;) – Igor