簡體   English   中英

用鼠標在Java中繪制形狀

[英]drawing shapes with mouse in java

我正在研究一個簡單的氣墊項目,該項目允許用戶從ComboBox選擇一個形狀,然后在面板上繪制它。 問題是當用戶選擇任何類型的形狀並嘗試在面板上繪制它時,沒有形狀出現。

這是我的小組課

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

}

您的面板太小了:300 x 300像素,但是繪制線條時,您以(500,200)開始,超出了面板的范圍:

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

嘗試將其拉近左上角:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM