Java 为什么赢了';我的形状不是在JFrame上画的吗?

Java 为什么赢了';我的形状不是在JFrame上画的吗?,java,swing,draw,Java,Swing,Draw,我正试图根据用户点击的内容绘制一个特定的形状。程序中的所有其他方法都运行良好。 以下是当前显示内容的图片: if(ableToDraw==true){ if(rect.isSelected()&&oval.isSelected()){ DrawShapes shapes = new DrawShapes(); shapes.whatToDraw(false,false

我正试图根据用户点击的内容绘制一个特定的形状。程序中的所有其他方法都运行良好。 以下是当前显示内容的图片:

if(ableToDraw==true){
                if(rect.isSelected()&&oval.isSelected()){
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(false,false);
                        }
                    }
                else if(rect.isSelected()){
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(true, false);
                    shapes.setPosition(event.getX(), event.getY());
                    add(shapes);

                }
                else if(oval.isSelected()){
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(false, true);
                    shapes.setPosition(event.getX(), event.getY());
                    add(shapes);
                }
                else{
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(false,false);
                }
            }
            @Override
            public void mousePressed(MouseEvent event){
                statusbar.setText("You pressed down the mouse");
            }

            @Override
            public void mouseReleased(MouseEvent event){
                statusbar.setText("You released the button");
            }
            @Override
            public void mouseEntered(MouseEvent event){
                statusbar.setText("You entered the area");

            }
            @Override
            public void mouseExited(MouseEvent event){
                statusbar.setText("The mouse has left the window");

            }
            //These are mouse motion events
            @Override
            public void mouseDragged(MouseEvent event){
                statusbar.setText("You are dragging the mouse");
            }
            @Override
            public void mouseMoved(MouseEvent event){
                statusbar.setText("You are moving the mouse");
            }
            @Override
            public void itemStateChanged(ItemEvent event){
                if(cb.isSelected()){
                    changeColor=false;
                }
                else{
                    changeColor=true;
                }
                if(drawBox.isSelected()){
                    ableToDraw=false;
                }
                else{
                    ableToDraw=true;
                }
            }

        }
    }
在这里,所选内容用于决定要绘制的内容。它通过将参数传递给drawShape类的方法来工作;如下图所示

if(ableToDraw==true){
                if(rect.isSelected()&&oval.isSelected()){
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(false,false);
                        }
                    }
                else if(rect.isSelected()){
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(true, false);
                    shapes.setPosition(event.getX(), event.getY());
                    add(shapes);

                }
                else if(oval.isSelected()){
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(false, true);
                    shapes.setPosition(event.getX(), event.getY());
                    add(shapes);
                }
                else{
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(false,false);
                }
            }
            @Override
            public void mousePressed(MouseEvent event){
                statusbar.setText("You pressed down the mouse");
            }

            @Override
            public void mouseReleased(MouseEvent event){
                statusbar.setText("You released the button");
            }
            @Override
            public void mouseEntered(MouseEvent event){
                statusbar.setText("You entered the area");

            }
            @Override
            public void mouseExited(MouseEvent event){
                statusbar.setText("The mouse has left the window");

            }
            //These are mouse motion events
            @Override
            public void mouseDragged(MouseEvent event){
                statusbar.setText("You are dragging the mouse");
            }
            @Override
            public void mouseMoved(MouseEvent event){
                statusbar.setText("You are moving the mouse");
            }
            @Override
            public void itemStateChanged(ItemEvent event){
                if(cb.isSelected()){
                    changeColor=false;
                }
                else{
                    changeColor=true;
                }
                if(drawBox.isSelected()){
                    ableToDraw=false;
                }
                else{
                    ableToDraw=true;
                }
            }

        }
    }
这是drawShapes课程

if(ableToDraw==true){
                if(rect.isSelected()&&oval.isSelected()){
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(false,false);
                        }
                    }
                else if(rect.isSelected()){
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(true, false);
                    shapes.setPosition(event.getX(), event.getY());
                    add(shapes);

                }
                else if(oval.isSelected()){
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(false, true);
                    shapes.setPosition(event.getX(), event.getY());
                    add(shapes);
                }
                else{
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(false,false);
                }
            }
            @Override
            public void mousePressed(MouseEvent event){
                statusbar.setText("You pressed down the mouse");
            }

            @Override
            public void mouseReleased(MouseEvent event){
                statusbar.setText("You released the button");
            }
            @Override
            public void mouseEntered(MouseEvent event){
                statusbar.setText("You entered the area");

            }
            @Override
            public void mouseExited(MouseEvent event){
                statusbar.setText("The mouse has left the window");

            }
            //These are mouse motion events
            @Override
            public void mouseDragged(MouseEvent event){
                statusbar.setText("You are dragging the mouse");
            }
            @Override
            public void mouseMoved(MouseEvent event){
                statusbar.setText("You are moving the mouse");
            }
            @Override
            public void itemStateChanged(ItemEvent event){
                if(cb.isSelected()){
                    changeColor=false;
                }
                else{
                    changeColor=true;
                }
                if(drawBox.isSelected()){
                    ableToDraw=false;
                }
                else{
                    ableToDraw=true;
                }
            }

        }
    }
  import java.awt.*;
    import javax.swing.*;
    public class DrawShapes extends JPanel {
        private int x,y;
        private boolean ovals,rects;
        public void paintComponent(Graphics g){
            super.paintComponent(g);
            if(ovals==false&&rects==true){
            g.setColor(Color.BLUE);
            g.fillRect(x,y,15,15);}
            else if(ovals==true&&rects==false){
                g.setColor(Color.BLUE);
                g.fillOval(x, y, 30, 15);
            }
            else{

            }
        }
        public void setPosition(int newX, int newY) {
            this.x = newX;
            this.y = newY;
            repaint();
        }

            public void whatToDraw(boolean newrects, boolean newovals){
                this.ovals=newovals;
                this.rects=newrects;
                repaint();


        }
    }

我猜问题在于您没有覆盖DrawShapes类的
getPreferredSize()
方法,因此没有任何东西可以绘制。因此,您需要覆盖
getPreferredSize()
以返回形状的实际大小,在您的情况下,对于椭圆和(x+15,y+15)矩形,该形状看起来是(x+30,y+15)

if(ableToDraw==true){
                if(rect.isSelected()&&oval.isSelected()){
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(false,false);
                        }
                    }
                else if(rect.isSelected()){
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(true, false);
                    shapes.setPosition(event.getX(), event.getY());
                    add(shapes);

                }
                else if(oval.isSelected()){
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(false, true);
                    shapes.setPosition(event.getX(), event.getY());
                    add(shapes);
                }
                else{
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(false,false);
                }
            }
            @Override
            public void mousePressed(MouseEvent event){
                statusbar.setText("You pressed down the mouse");
            }

            @Override
            public void mouseReleased(MouseEvent event){
                statusbar.setText("You released the button");
            }
            @Override
            public void mouseEntered(MouseEvent event){
                statusbar.setText("You entered the area");

            }
            @Override
            public void mouseExited(MouseEvent event){
                statusbar.setText("The mouse has left the window");

            }
            //These are mouse motion events
            @Override
            public void mouseDragged(MouseEvent event){
                statusbar.setText("You are dragging the mouse");
            }
            @Override
            public void mouseMoved(MouseEvent event){
                statusbar.setText("You are moving the mouse");
            }
            @Override
            public void itemStateChanged(ItemEvent event){
                if(cb.isSelected()){
                    changeColor=false;
                }
                else{
                    changeColor=true;
                }
                if(drawBox.isSelected()){
                    ableToDraw=false;
                }
                else{
                    ableToDraw=true;
                }
            }

        }
    }
您真的应该为矩形和椭圆形创建单独的类。使用if/else语句不是一个好的设计,如果您决定添加一个“三角形”形状,因为您的逻辑变得更加复杂,那么使用if/else语句也不是很灵活

if(ableToDraw==true){
                if(rect.isSelected()&&oval.isSelected()){
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(false,false);
                        }
                    }
                else if(rect.isSelected()){
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(true, false);
                    shapes.setPosition(event.getX(), event.getY());
                    add(shapes);

                }
                else if(oval.isSelected()){
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(false, true);
                    shapes.setPosition(event.getX(), event.getY());
                    add(shapes);
                }
                else{
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(false,false);
                }
            }
            @Override
            public void mousePressed(MouseEvent event){
                statusbar.setText("You pressed down the mouse");
            }

            @Override
            public void mouseReleased(MouseEvent event){
                statusbar.setText("You released the button");
            }
            @Override
            public void mouseEntered(MouseEvent event){
                statusbar.setText("You entered the area");

            }
            @Override
            public void mouseExited(MouseEvent event){
                statusbar.setText("The mouse has left the window");

            }
            //These are mouse motion events
            @Override
            public void mouseDragged(MouseEvent event){
                statusbar.setText("You are dragging the mouse");
            }
            @Override
            public void mouseMoved(MouseEvent event){
                statusbar.setText("You are moving the mouse");
            }
            @Override
            public void itemStateChanged(ItemEvent event){
                if(cb.isSelected()){
                    changeColor=false;
                }
                else{
                    changeColor=true;
                }
                if(drawBox.isSelected()){
                    ableToDraw=false;
                }
                else{
                    ableToDraw=true;
                }
            }

        }
    }
但是,即使这样做,您也不会得到您期望的结果,因为我猜您将DrawShapes组件添加到面板中,默认情况下,该面板使用FlowLayout。因此,您的形状将仅显示在面板上的一行中,而不是单击面板的位置

if(ableToDraw==true){
                if(rect.isSelected()&&oval.isSelected()){
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(false,false);
                        }
                    }
                else if(rect.isSelected()){
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(true, false);
                    shapes.setPosition(event.getX(), event.getY());
                    add(shapes);

                }
                else if(oval.isSelected()){
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(false, true);
                    shapes.setPosition(event.getX(), event.getY());
                    add(shapes);
                }
                else{
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(false,false);
                }
            }
            @Override
            public void mousePressed(MouseEvent event){
                statusbar.setText("You pressed down the mouse");
            }

            @Override
            public void mouseReleased(MouseEvent event){
                statusbar.setText("You released the button");
            }
            @Override
            public void mouseEntered(MouseEvent event){
                statusbar.setText("You entered the area");

            }
            @Override
            public void mouseExited(MouseEvent event){
                statusbar.setText("The mouse has left the window");

            }
            //These are mouse motion events
            @Override
            public void mouseDragged(MouseEvent event){
                statusbar.setText("You are dragging the mouse");
            }
            @Override
            public void mouseMoved(MouseEvent event){
                statusbar.setText("You are moving the mouse");
            }
            @Override
            public void itemStateChanged(ItemEvent event){
                if(cb.isSelected()){
                    changeColor=false;
                }
                else{
                    changeColor=true;
                }
                if(drawBox.isSelected()){
                    ableToDraw=false;
                }
                else{
                    ableToDraw=true;
                }
            }

        }
    }
如果希望零部件显示在单击的位置,则需要将椭圆形零部件的大小设置为(30,15),并将零部件的位置设置为(x,y)。然后在(0,0)处完成形状的绘制,因此绘制是相对于组件的,而不是相对于面板的。然后,需要将面板的布局设置为null,以便可以根据每个形状的位置手动定位每个形状

if(ableToDraw==true){
                if(rect.isSelected()&&oval.isSelected()){
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(false,false);
                        }
                    }
                else if(rect.isSelected()){
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(true, false);
                    shapes.setPosition(event.getX(), event.getY());
                    add(shapes);

                }
                else if(oval.isSelected()){
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(false, true);
                    shapes.setPosition(event.getX(), event.getY());
                    add(shapes);
                }
                else{
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(false,false);
                }
            }
            @Override
            public void mousePressed(MouseEvent event){
                statusbar.setText("You pressed down the mouse");
            }

            @Override
            public void mouseReleased(MouseEvent event){
                statusbar.setText("You released the button");
            }
            @Override
            public void mouseEntered(MouseEvent event){
                statusbar.setText("You entered the area");

            }
            @Override
            public void mouseExited(MouseEvent event){
                statusbar.setText("The mouse has left the window");

            }
            //These are mouse motion events
            @Override
            public void mouseDragged(MouseEvent event){
                statusbar.setText("You are dragging the mouse");
            }
            @Override
            public void mouseMoved(MouseEvent event){
                statusbar.setText("You are moving the mouse");
            }
            @Override
            public void itemStateChanged(ItemEvent event){
                if(cb.isSelected()){
                    changeColor=false;
                }
                else{
                    changeColor=true;
                }
                if(drawBox.isSelected()){
                    ableToDraw=false;
                }
                else{
                    ableToDraw=true;
                }
            }

        }
    }
另一个选项是不使用真实组件,而只是将形状绘制到面板上。查看两种常见的增量绘制方法的示例。它显示了两种不同的方法,具体取决于您的具体需求

if(ableToDraw==true){
                if(rect.isSelected()&&oval.isSelected()){
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(false,false);
                        }
                    }
                else if(rect.isSelected()){
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(true, false);
                    shapes.setPosition(event.getX(), event.getY());
                    add(shapes);

                }
                else if(oval.isSelected()){
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(false, true);
                    shapes.setPosition(event.getX(), event.getY());
                    add(shapes);
                }
                else{
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(false,false);
                }
            }
            @Override
            public void mousePressed(MouseEvent event){
                statusbar.setText("You pressed down the mouse");
            }

            @Override
            public void mouseReleased(MouseEvent event){
                statusbar.setText("You released the button");
            }
            @Override
            public void mouseEntered(MouseEvent event){
                statusbar.setText("You entered the area");

            }
            @Override
            public void mouseExited(MouseEvent event){
                statusbar.setText("The mouse has left the window");

            }
            //These are mouse motion events
            @Override
            public void mouseDragged(MouseEvent event){
                statusbar.setText("You are dragging the mouse");
            }
            @Override
            public void mouseMoved(MouseEvent event){
                statusbar.setText("You are moving the mouse");
            }
            @Override
            public void itemStateChanged(ItemEvent event){
                if(cb.isSelected()){
                    changeColor=false;
                }
                else{
                    changeColor=true;
                }
                if(drawBox.isSelected()){
                    ableToDraw=false;
                }
                else{
                    ableToDraw=true;
                }
            }

        }
    }

示例显示了如何添加矩形,以及如何单击/拖动鼠标。因此,您需要修改代码以支持不同类型的形状。

我猜问题在于您没有覆盖DrawShapes类的
getPreferredSize()
方法,因此没有任何可绘制的内容。因此,您需要覆盖
getPreferredSize()
以返回形状的实际大小,在您的情况下,对于椭圆和(x+15,y+15)矩形,该形状看起来是(x+30,y+15)

if(ableToDraw==true){
                if(rect.isSelected()&&oval.isSelected()){
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(false,false);
                        }
                    }
                else if(rect.isSelected()){
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(true, false);
                    shapes.setPosition(event.getX(), event.getY());
                    add(shapes);

                }
                else if(oval.isSelected()){
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(false, true);
                    shapes.setPosition(event.getX(), event.getY());
                    add(shapes);
                }
                else{
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(false,false);
                }
            }
            @Override
            public void mousePressed(MouseEvent event){
                statusbar.setText("You pressed down the mouse");
            }

            @Override
            public void mouseReleased(MouseEvent event){
                statusbar.setText("You released the button");
            }
            @Override
            public void mouseEntered(MouseEvent event){
                statusbar.setText("You entered the area");

            }
            @Override
            public void mouseExited(MouseEvent event){
                statusbar.setText("The mouse has left the window");

            }
            //These are mouse motion events
            @Override
            public void mouseDragged(MouseEvent event){
                statusbar.setText("You are dragging the mouse");
            }
            @Override
            public void mouseMoved(MouseEvent event){
                statusbar.setText("You are moving the mouse");
            }
            @Override
            public void itemStateChanged(ItemEvent event){
                if(cb.isSelected()){
                    changeColor=false;
                }
                else{
                    changeColor=true;
                }
                if(drawBox.isSelected()){
                    ableToDraw=false;
                }
                else{
                    ableToDraw=true;
                }
            }

        }
    }
您真的应该为矩形和椭圆形创建单独的类。使用if/else语句不是一个好的设计,如果您决定添加一个“三角形”形状,因为您的逻辑变得更加复杂,那么使用if/else语句也不是很灵活

if(ableToDraw==true){
                if(rect.isSelected()&&oval.isSelected()){
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(false,false);
                        }
                    }
                else if(rect.isSelected()){
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(true, false);
                    shapes.setPosition(event.getX(), event.getY());
                    add(shapes);

                }
                else if(oval.isSelected()){
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(false, true);
                    shapes.setPosition(event.getX(), event.getY());
                    add(shapes);
                }
                else{
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(false,false);
                }
            }
            @Override
            public void mousePressed(MouseEvent event){
                statusbar.setText("You pressed down the mouse");
            }

            @Override
            public void mouseReleased(MouseEvent event){
                statusbar.setText("You released the button");
            }
            @Override
            public void mouseEntered(MouseEvent event){
                statusbar.setText("You entered the area");

            }
            @Override
            public void mouseExited(MouseEvent event){
                statusbar.setText("The mouse has left the window");

            }
            //These are mouse motion events
            @Override
            public void mouseDragged(MouseEvent event){
                statusbar.setText("You are dragging the mouse");
            }
            @Override
            public void mouseMoved(MouseEvent event){
                statusbar.setText("You are moving the mouse");
            }
            @Override
            public void itemStateChanged(ItemEvent event){
                if(cb.isSelected()){
                    changeColor=false;
                }
                else{
                    changeColor=true;
                }
                if(drawBox.isSelected()){
                    ableToDraw=false;
                }
                else{
                    ableToDraw=true;
                }
            }

        }
    }
但是,即使这样做,您也不会得到您期望的结果,因为我猜您将DrawShapes组件添加到面板中,默认情况下,该面板使用FlowLayout。因此,您的形状将仅显示在面板上的一行中,而不是单击面板的位置

if(ableToDraw==true){
                if(rect.isSelected()&&oval.isSelected()){
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(false,false);
                        }
                    }
                else if(rect.isSelected()){
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(true, false);
                    shapes.setPosition(event.getX(), event.getY());
                    add(shapes);

                }
                else if(oval.isSelected()){
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(false, true);
                    shapes.setPosition(event.getX(), event.getY());
                    add(shapes);
                }
                else{
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(false,false);
                }
            }
            @Override
            public void mousePressed(MouseEvent event){
                statusbar.setText("You pressed down the mouse");
            }

            @Override
            public void mouseReleased(MouseEvent event){
                statusbar.setText("You released the button");
            }
            @Override
            public void mouseEntered(MouseEvent event){
                statusbar.setText("You entered the area");

            }
            @Override
            public void mouseExited(MouseEvent event){
                statusbar.setText("The mouse has left the window");

            }
            //These are mouse motion events
            @Override
            public void mouseDragged(MouseEvent event){
                statusbar.setText("You are dragging the mouse");
            }
            @Override
            public void mouseMoved(MouseEvent event){
                statusbar.setText("You are moving the mouse");
            }
            @Override
            public void itemStateChanged(ItemEvent event){
                if(cb.isSelected()){
                    changeColor=false;
                }
                else{
                    changeColor=true;
                }
                if(drawBox.isSelected()){
                    ableToDraw=false;
                }
                else{
                    ableToDraw=true;
                }
            }

        }
    }
如果希望零部件显示在单击的位置,则需要将椭圆形零部件的大小设置为(30,15),并将零部件的位置设置为(x,y)。然后在(0,0)处完成形状的绘制,因此绘制是相对于组件的,而不是相对于面板的。然后,需要将面板的布局设置为null,以便可以根据每个形状的位置手动定位每个形状

if(ableToDraw==true){
                if(rect.isSelected()&&oval.isSelected()){
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(false,false);
                        }
                    }
                else if(rect.isSelected()){
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(true, false);
                    shapes.setPosition(event.getX(), event.getY());
                    add(shapes);

                }
                else if(oval.isSelected()){
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(false, true);
                    shapes.setPosition(event.getX(), event.getY());
                    add(shapes);
                }
                else{
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(false,false);
                }
            }
            @Override
            public void mousePressed(MouseEvent event){
                statusbar.setText("You pressed down the mouse");
            }

            @Override
            public void mouseReleased(MouseEvent event){
                statusbar.setText("You released the button");
            }
            @Override
            public void mouseEntered(MouseEvent event){
                statusbar.setText("You entered the area");

            }
            @Override
            public void mouseExited(MouseEvent event){
                statusbar.setText("The mouse has left the window");

            }
            //These are mouse motion events
            @Override
            public void mouseDragged(MouseEvent event){
                statusbar.setText("You are dragging the mouse");
            }
            @Override
            public void mouseMoved(MouseEvent event){
                statusbar.setText("You are moving the mouse");
            }
            @Override
            public void itemStateChanged(ItemEvent event){
                if(cb.isSelected()){
                    changeColor=false;
                }
                else{
                    changeColor=true;
                }
                if(drawBox.isSelected()){
                    ableToDraw=false;
                }
                else{
                    ableToDraw=true;
                }
            }

        }
    }
另一个选项是不使用真实组件,而只是将形状绘制到面板上。查看两种常见的增量绘制方法的示例。它显示了两种不同的方法,具体取决于您的具体需求

if(ableToDraw==true){
                if(rect.isSelected()&&oval.isSelected()){
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(false,false);
                        }
                    }
                else if(rect.isSelected()){
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(true, false);
                    shapes.setPosition(event.getX(), event.getY());
                    add(shapes);

                }
                else if(oval.isSelected()){
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(false, true);
                    shapes.setPosition(event.getX(), event.getY());
                    add(shapes);
                }
                else{
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(false,false);
                }
            }
            @Override
            public void mousePressed(MouseEvent event){
                statusbar.setText("You pressed down the mouse");
            }

            @Override
            public void mouseReleased(MouseEvent event){
                statusbar.setText("You released the button");
            }
            @Override
            public void mouseEntered(MouseEvent event){
                statusbar.setText("You entered the area");

            }
            @Override
            public void mouseExited(MouseEvent event){
                statusbar.setText("The mouse has left the window");

            }
            //These are mouse motion events
            @Override
            public void mouseDragged(MouseEvent event){
                statusbar.setText("You are dragging the mouse");
            }
            @Override
            public void mouseMoved(MouseEvent event){
                statusbar.setText("You are moving the mouse");
            }
            @Override
            public void itemStateChanged(ItemEvent event){
                if(cb.isSelected()){
                    changeColor=false;
                }
                else{
                    changeColor=true;
                }
                if(drawBox.isSelected()){
                    ableToDraw=false;
                }
                else{
                    ableToDraw=true;
                }
            }

        }
    }

示例显示了如何添加矩形,以及如何单击/拖动鼠标。因此,您需要修改代码以支持不同类型的形状。

首先,我必须创建drawShapes类的一个实例,如另一个用户所述。然后另一部分是我搞乱了逻辑,你应该只有在ableToDraw==false时才能画图,这意味着没有选中“not About to draw”按钮。对我来说,这是个糟糕的名字。完成后,代码工作正常。

首先,我必须创建drawShapes类的一个实例,如另一个用户所述。然后另一部分是我搞乱了逻辑,你应该只有在ableToDraw==false时才能画图,这意味着没有选中“not About to draw”按钮。对我来说,这是个糟糕的名字。一旦完成,代码就可以正常工作。

您继续创建
DrawShapes
的新实例,其中一些您没有添加到UI中,那些您添加的显示当前内容,这将导致一团混乱。最好创建一个
DrawShapes
的实例并添加它,然后更改它的属性这解决了一半的问题,另一部分是我弄乱了逻辑,你应该只能在ableToDraw==false时进行绘制,这意味着没有选择“无法绘制”的按钮。这对我来说是一个糟糕的命名。你继续创建
DrawShapes
的新实例,有些你没有添加到UI中,有些你添加的显示当前内容,这将导致一团混乱。最好创建一个
DrawShapes
的实例并添加它,然后更改它的属性这解决了一半的问题,另一部分是我弄乱了逻辑,你应该只能在ableToDraw==false时进行绘制,这意味着没有选择“无法绘制”的按钮。对我来说,这是个糟糕的名字。
if(ableToDraw==true){
                if(rect.isSelected()&&oval.isSelected()){
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(false,false);
                        }
                    }
                else if(rect.isSelected()){
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(true, false);
                    shapes.setPosition(event.getX(), event.getY());
                    add(shapes);

                }
                else if(oval.isSelected()){
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(false, true);
                    shapes.setPosition(event.getX(), event.getY());
                    add(shapes);
                }
                else{
                    DrawShapes shapes = new DrawShapes();
                    shapes.whatToDraw(false,false);
                }
            }
            @Override
            public void mousePressed(MouseEvent event){
                statusbar.setText("You pressed down the mouse");
            }

            @Override
            public void mouseReleased(MouseEvent event){
                statusbar.setText("You released the button");
            }
            @Override
            public void mouseEntered(MouseEvent event){
                statusbar.setText("You entered the area");

            }
            @Override
            public void mouseExited(MouseEvent event){
                statusbar.setText("The mouse has left the window");

            }
            //These are mouse motion events
            @Override
            public void mouseDragged(MouseEvent event){
                statusbar.setText("You are dragging the mouse");
            }
            @Override
            public void mouseMoved(MouseEvent event){
                statusbar.setText("You are moving the mouse");
            }
            @Override
            public void itemStateChanged(ItemEvent event){
                if(cb.isSelected()){
                    changeColor=false;
                }
                else{
                    changeColor=true;
                }
                if(drawBox.isSelected()){
                    ableToDraw=false;
                }
                else{
                    ableToDraw=true;
                }
            }

        }
    }