java - 我的 for 循环似乎没有在我的绘制方法中运行

标签 java swing paint

所以我在 Java 上构建了打砖 block ,到目前为止我已经完成了大部分 UI,但我在 UI 上显示我的砖 block 时遇到了问题。我已经在我的绘制方法中编写了它的代码,该方法构建了我的面板,然后将我的面板添加到另一个类中的 JFrame 中。除了我的砖 block 之外,所有内容都显示出来,我似乎无法弄清楚为什么..

// AnimationPanel.java
//
// Informatics 45 Spring 2010
// Code Example: Our Ball Animation Becomes a Game
//
// This is relatively similar to our AnimationPanel in the previous version
// of our ball animation, with two changes:
//
// * The paddle is now drawn, in addition to just the ball.  For fun, I've
//   drawn the paddle in a different color than the ball.
//
// * This panel has a MouseMotionListener attached to it.  The job of a
//   MouseMotionListener is to listen for mouse movement within a component.
//   In this case, any mouse movement within our AnimationPanel will turn
//   into events, which we'll handle by adjusting the center x-coordinate
//   of the paddle accordingly.
//
// * Because we need to calculate a new position for the paddle as the mouse
//   moves, we'll need to be able to convert coordinates in both directions
//   (i.e., fractional coordinates to pixel coordinates and pixel coordinates
//   to fractional coordinates).

package inf45.spring2010.examples.animation2.gui;

import inf45.spring2009.examples.animation2.model.Animation;
import inf45.spring2009.examples.animation2.model.AnimationState;

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


public class AnimationPanel extends JPanel
{
    private Animation animation;
    private inf45.spring2009.examples.animation2.model.AnimationState currentState;
    boolean brickVisible[][];
    int bricksInRow = 4; 
    int bricksInColumn = 8; 
    int brickWidth;
    int brickHeight;
    int bricksLeft;

    public AnimationPanel(Animation animation)
    {
        this.animation = animation;
        currentState = null;
        setBackground(Color.WHITE);

        addMouseMotionListener(
            new MouseMotionAdapter()
            {
                public void mouseMoved(MouseEvent e)
                {
                    updatePaddlePosition(e.getX());
                }
            });
    }


    public void updateState(AnimationState newState)
    {
        currentState = newState;
    }


    private void updatePaddlePosition(int pixelX)
    {
        double paddleCenterX = convertPixelXToX(pixelX);
        animation.updatePaddleCenterX(paddleCenterX);
    }


    public void paint(Graphics g)
    {
        super.paint(g);

        if (currentState == null)
        {
            return;
        }





        int centerPixelX = convertXToPixelX(currentState.getBallCenterX());
        int centerPixelY = convertYToPixelY(currentState.getBallCenterY());

        int radiusX = convertXToPixelX(currentState.getBallRadius());
        int radiusY = convertYToPixelY(currentState.getBallRadius());

        int topLeftPixelX = centerPixelX - radiusX;
        int topLeftPixelY = centerPixelY - radiusY;

        int paddleCenterPixelX = convertXToPixelX(currentState.getPaddleCenterX());
        int paddleCenterPixelY = convertYToPixelY(currentState.getPaddleCenterY());
        int paddleWidthPixels = convertXToPixelX(currentState.getPaddleWidth());
        int paddleHeightPixels = convertYToPixelY(currentState.getPaddleHeight());

        int paddleTopLeftPixelX = paddleCenterPixelX - (paddleWidthPixels / 2);
        int paddleTopLeftPixelY = paddleCenterPixelY - (paddleHeightPixels / 2);

        Graphics2D g2d = (Graphics2D) g;

        /* for (int x = 0;x<bricksInRow;x++){
              for (int y = 0;y<bricksInColumn;y++){
                  boolean bricks[][] = null;
                brickVisible[x][y] = bricks[x][y] ;
              {
                  g2d.setColor(Color.black);
                  g2d.fillRect(x*brickWidth,y*brickHeight,brickWidth-1,brickHeight-1);
                }
          }
         }
         */

        g2d.setRenderingHint(
            RenderingHints.KEY_ANTIALIASING,
            RenderingHints.VALUE_ANTIALIAS_ON);

        g2d.setColor(Color.BLUE);

        g2d.fillOval(topLeftPixelX, topLeftPixelY, radiusX * 2, radiusY * 2);

        g2d.setColor(Color.RED);


        g2d.fillRect(
            paddleTopLeftPixelX, paddleTopLeftPixelY,
            paddleWidthPixels, paddleHeightPixels);
    }


    private int convertXToPixelX(double x)
    {
        return (int) (x * getWidth());
    }


    private int convertYToPixelY(double y)
    {
        return (int) (y * getHeight());
    }


    private double convertPixelXToX(int pixelX)
    {
        return (double) pixelX / getWidth();
    }


}

最佳答案

您似乎没有在代码中为 brickHeightbrickWidth 分配任何值。这可能就是问题所在。

关于java - 我的 for 循环似乎没有在我的绘制方法中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6241532/

相关文章:

java - 绘制可拖动的文本框

java - 安卓画图 : how to get "airbrush" effect?

java - Libgdx 插值渲染 Sprite 无故抖动

java - 将一个类方法传递给另一个类方法

java - 如何在 RecyclerView 中对选中的项目数据值求和

java - 如何从jtable内的组合框中获取值和选定的值?

java - 降雨量图 - 文本字段填充数组

java - 试图禁用 JInternalFrame 的拖动

java - 选项卡是哪种对象?

java - 无法读取从一个 BLE 设备发送到其他设备的特征值