0

我有一个扩展类 JComponent 的类,我在其中创建了一个带有图形的组件。我想使用 MigLayout 在框架中添加对象这个类,但是组件没有添加,我只能看到空框架。谢谢您的帮助。

用数字创建组件的类

public class DrawPictures extends JComponent
{
    static 
    {
        flagLeft = true;
        flagLeft  = true;
        flagforfoot = true;
    }

    public void setStringForMoveBall(String string)
    {
        stringForMoveBall = string;
    }

    public String getStringForMoveBall ()
    {
        return stringForMoveBall;
    }

    public DrawPictures() 
    {  
        changeColorBall = 0;
        stringForMoveBall = "";
        this.offset = 8;
        marginBetweenRectangles = 70;
        height = radiusWidth = 50;
        top = radiusHeight = 30;
        width = 60;
        left = 20;
        this.counter = 11;
        rectangles = new LinkedList<RoundRectangle2D>();
        ball = new Ellipse2D.Double( 400,570,top, top );
        FullCollection(rectangles);
        pusherFoot = new RoundRectangle2D.Double( 350, 600, 150, 50,radiusWidth,radiusHeight );

        timerForBall = new Timer(40, new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e)
            {   
                repaint();
            }
        } );
        timerForBall.start();
    }

    private void DrawRectangles( Graphics2D drawer )
    {
       if( flagforfoot )
       {
           //flagforfoot = false;
            for( int i = 0; i != rectangles.size(); ++i ) 
            {
                if ( i % 4 == 0)
                {
                    drawer.setColor( Color.RED );
                    drawer.fill(rectangles.get(i));
                }
                else if ( i % 3 == 0)
                {
                    drawer.setColor( Color.CYAN );
                    drawer.fill(rectangles.get(i));
                }
                else if ( i % 5 == 0)
                {
                    drawer.setColor( Color.YELLOW );
                    drawer.fill(rectangles.get(i));
                }
                else if ( i % 7 == 0)
                {
                    drawer.setColor( Color.WHITE );
                    drawer.fill(rectangles.get(i));
                }
                else if ( i % 8 == 0)
                {
                    drawer.setColor( Color.MAGENTA );
                    drawer.fill(rectangles.get(i));
                }
                else if ( i % 9 == 0)
                {
                    drawer.setColor( Color.GREEN );
                    drawer.fill(rectangles.get(i));
                }

                else 
                {
                    drawer.setColor( Color.PINK );
                    drawer.fill(rectangles.get(i));
                }
            }
        }
    }

    @Override protected void paintComponent( Graphics graphics )
    {
        super.paintComponent(graphics);
        drawer = (Graphics2D)graphics;
        DrawRectangles(drawer);     
        drawer.setColor(Color.YELLOW);
        drawer.fill(pusherFoot);
        MoveFootRectangle(pusherFoot);
        drawer.setColor(Color.GREEN);
        drawer.fill(ball);
        MoveBall( );

    }        

   private void CheckHitBallWithRectangles( )
   {    
       for( int i = rectangles.size() - 1; i > 0; --i )
       {
           if( ball.getMinY() >= rectangles.get(i).getMinY() &&
               ball.getMinY() <= rectangles.get(i).getMaxY() &&
               ball.getMaxX() >= rectangles.get(i).getMinX() &&
               ball.getMaxX() <= rectangles.get(i).getMaxX() )
           {
               if ( CompareStringsForMoveBall("") )
               {
                   stringForMoveBall = "DownAndLeftFromTopSide";
                   rectangles.remove(i);
                   rectangles.add(i,new RoundRectangle2D.Double(0,0,0,0,0,0));
                   //--i;  
               }
               if( CompareStringsForMoveBall("UpAndRightFromLeftSide") )
               {
                   stringForMoveBall = "DownAndRightFromTopSide";
                   rectangles.remove(i);
                   //--i;
                   rectangles.add(i,new RoundRectangle2D.Double(0,0,0,0,0,0));
               }
           }
           if(     ball.getMinY() >= rectangles.get(i).getMinY() &&
                   ball.getMinY() <= rectangles.get(i).getMaxY() &&
                   ball.getMinX() >= rectangles.get(i).getMinX() &&
                   ball.getMinX() <= rectangles.get(i).getMaxX())
           {
               if ( CompareStringsForMoveBall("") )
               {
                    stringForMoveBall = "DownAndLeftFromTopSide";
                    rectangles.remove(i);
                    //--i;
                    rectangles.add(i,new RoundRectangle2D.Double(0,0,0,0,0,0));
               } 
           }

           if ( ball.getMaxY() >= rectangles.get(i).getMinY() &&
             ball.getMaxY() <= rectangles.get(i).getMaxY() &&
             ball.getMaxX() >= rectangles.get(i).getMinX() &&
             ball.getMaxX() <= rectangles.get(i).getMaxX())
           {
               if( CompareStringsForMoveBall("DownAndRightFromTopSide") )
               {
                   stringForMoveBall = "DownAndLeftFromTopSide";
                    rectangles.remove(i);
                    rectangles.add(i,new RoundRectangle2D.Double(0,0,0,0,0,0));
                    //--i;
               }
               if( CompareStringsForMoveBall("UpAndRightFromLeftSide") )
               {
                   stringForMoveBall = "DownAndRightFromTopSide";
                    rectangles.remove(i);
                    //--i;
                    rectangles.add(i,new RoundRectangle2D.Double(0,0,0,0,0,0));
               }
           }
           if ( ball.getMinX() >= rectangles.get(i).getMinX() &&
                ball.getMinX() <= rectangles.get(i).getMaxX()&&
                ball.getMinY() >= rectangles.get(i).getMinY() &&
                ball.getMinY() <= rectangles.get(i).getMaxY())
           {
                rectangles.remove(i);
                //--i;
               rectangles.add(i,new RoundRectangle2D.Double(0,0,0,0,0,0));
           }
           //System.out.println(rectangles.size());
       }
   }    
    public void MoveFootRectangle(RoundRectangle2D pusher) 
    {

            if( flagLeft && pusher.getX() >= 0)
            {

                pusher.setFrame(pusher.getX() - 30, pusher.getY(), 150, 60);
                flagLeft = false;
            }
            if( flagRight && pusher.getX() <= 730 )
            {
                pusher.setFrame(pusher.getX() + 30, pusher.getY(), 150, 60);
                flagRight = false;                 
            }

    }

   public static void SetStatusFlagLeft( )
   { 
       flagLeft = true; 
   }
   public static void SetStatusFlagRight( )
   {
       flagRight = true;
   }
   private void MoveBallYLessNull( )
   {
       if( CompareStringsForMoveBall( "" ) )
        {
            stringForMoveBall = "DownAndLeftFromTopSide";              
        }
        else if( CompareStringsForMoveBall( "UpAndRightFromLeftSide" ) )
        {
            stringForMoveBall = "DownAndRightFromTopSide";
        }
   }
   private void MoveBallXLessNull( )
   {
       if (  CompareStringsForMoveBall( "DownAndLeftFromTopSide" ) )  
        {
            stringForMoveBall = "DownAndRightFromTopSide"; 
        }
        else if( stringForMoveBall.compareTo( "" ) == 0 )
        {
        stringForMoveBall = "UpAndRightFromLeftSide";
        }
   }

    private void MoveBall()
    {     
         if ( CompareStringsForMoveBall( "" ) )
         {
             ball.setFrame(ball.getX() - offset, ball.getY() - offset, top, top);
         }
         if ( CompareStringsForMoveBall( "DownAndLeftFromTopSide" ) )
         {
             ball.setFrame(ball.getX() - offset, ball.getY() + offset, top, top);
         }

         if( ball.getX() < 0  )
         {
            MoveBallXLessNull();            
         }
         if( ball.getY() < 0 )
         {
            MoveBallYLessNull();             
         }
         if ( CompareStringsForMoveBall( "UpAndRightFromLeftSide" ) )
         {
             ball.setFrame(ball.getX() + offset, ball.getY() - offset, top, top );
         }

        if ( CompareStringsForMoveBall( "DownAndRightFromTopSide" ) )
         {
             ball.setFrame(ball.getX() + offset, ball.getY() + offset, top, top);
         }

        if ( ball.getMaxY() == pusherFoot.getMinY() && 
                ball.getCenterX() > pusherFoot.getMinX() 
             && ball.getCenterX() < pusherFoot.getMaxX() )
        {
            MoveBallHitWithFoot();
        }

        if( ball.getMaxX() > 880)
        {
            MoveBallForXMoreWidth();
        }

        CheckHitBallWithRectangles();
    }

    public void MoveBallForXMoreWidth( )
   {
       if ( CompareStringsForMoveBall( "DownAndRightFromTopSide" ) ) 
        {
            setStringForMoveBall("DownAndLeftFromTopSide");
        }
        else if( CompareStringsForMoveBall( "UpAndRightFromLeftSide" ) ) 
        {
           setStringForMoveBall("");               
        } 
   }

    public void MoveBallHitWithFoot( )
   {
       if ( CompareStringsForMoveBall( "DownAndRightFromTopSide" ) )
        {
           setStringForMoveBall("UpAndRightFromLeftSide") ;
        }
       else if ( CompareStringsForMoveBall( "DownAndLeftFromTopSide" ) ) 
        {
           setStringForMoveBall("");   
        }
   }
    public boolean CompareStringsForMoveBall( String moveforball )
   {
       if ( (getStringForMoveBall()).compareTo(moveforball) == 0 )
       { 
           return true;
       }
       else
       {
          return false;
       }
   }

   private void FullCollection(LinkedList<RoundRectangle2D> newrectangles)
   {
       int counterTop = 0;

       for( int i = 0; i <= counter; ++i )
       {
            newrectangles.add(new RoundRectangle2D.Double
              ( top + counterTop,left,width,height,radiusWidth,radiusHeight ));
            counterTop += marginBetweenRectangles;
       }

       counterTop = 0;

       for( int i = 0; i <= counter; ++i )
       {
            newrectangles.add(new RoundRectangle2D.Double
            ( top + counterTop,left + marginBetweenRectangles,width,height,radiusWidth,radiusHeight ));
            counterTop += marginBetweenRectangles;
       }

       counterTop = 0;

       for( int i = 0; i <= counter; ++i )
       {
            newrectangles.add(new RoundRectangle2D.Double
           ( top + counterTop,left + marginBetweenRectangles * 2,width,height,radiusWidth,radiusHeight ));
            counterTop += marginBetweenRectangles;
       }

   }
   private LinkedList<RoundRectangle2D> rectangles;
   private Ellipse2D ball;
   private int width,left,top,height, counter,radiusWidth,
           radiusHeight,marginBetweenRectangles,offset,changeColorBall;
   private RoundRectangle2D pusherFoot;
   private Timer timerForBall;
   private static boolean flagLeft,flagRight, flagforfoot;
   private String stringForMoveBall;
   private Graphics2D drawer;


}

创建对象类 DrawPictures 并尝试添加到框架中的类

public class FrameForGame extends JFrame  
{
    public FrameForGame() 
    {
        super("MyGame");
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        setLayout(new MigLayout());

        setSize(WIDTH_H, HEIGHT_H);
        setLocation(150, 50);
        event = new ForEvents();
        addKeyListener(event); 
        add(new DrawPictures());
        setVisible(true);
    }
    private int WIDTH_H = 900;
    private int HEIGHT_H = 700;
    private ForEvents event;
    private JPanel panel;


       }

具有 Main 方法的类

public class MyGame {

       public static void main(String[] args) 
    {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() 
            {
                FrameForGame frameForGame = new FrameForGame();             
            }
        });
    }
}
4

1 回答 1

1
于 2013-01-29T18:24:10.827 回答