用鼠标在java中绘制图形

用鼠标在java中绘制图形,java,graphics,drawing,shapes,Java,Graphics,Drawing,Shapes,我正在做一个简单的喘气项目,允许用户从组合框中选择一个形状,然后在面板上绘制。问题是,当用户选择任何类型的形状并尝试在面板上绘制时,都不会出现任何形状 这是我的小组课 import java.awt.Color; import javax.swing.JPanel; import java.awt.*; import java.awt.event.*; public class Shapes extends JPanel { private MyLine[] lines = new M

我正在做一个简单的喘气项目,允许用户从
组合框中选择一个形状,然后在面板上绘制。问题是,当用户选择任何类型的形状并尝试在面板上绘制时,都不会出现任何形状

这是我的小组课

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);
            }
        }

    }
}

您的面板太小了:它是300 x 300像素,但当您绘制线时,它的起点是(500200),超出了面板的边界:

g.drawLine(500, 200, 300, 400);
尝试将其靠近左上角绘制:

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

如果你给我们一个简短但可编译的例子来重现你的问题,那会很有帮助。它现在可以工作,但在我画线时仍然是个问题,然后选择重新绘制所有要从面板中删除的线如何在同一面板上绘制多个形状?!同时,您的代码中也有一些错误。让我们从paintComponent开始:您不需要这些if,因为无论选择什么类型的图形,您都希望将它们全部绘制出来。接下来,您有两个相同的if(测试ShapeType==1),并且在每个if中仅绘制线。如果需要更多帮助,请尝试修复这些问题并重新发布代码。
 g.drawLine(0, 0, 300, 400);