【问题标题】:JComponent size issueJComponent 大小问题
【发布时间】:2011-11-05 01:41:09
【问题描述】:

我有一个JComponent 子类,用于在我的屏幕上绘制形状。在构造函数中,我试图将ballXballY 设置为JComponentXY 大小值的一半,我想我是做错了。我现在查了很多,找不到补救措施。代码如下。请记住,这是我第一次真正的 Swing/Graphics2D 冒险。

public class PongCanvas extends JComponent {
//Vars to hold XY values and Dimension values.

    private int batXDim, batYDim;
    private int b1X, b1Y;
    private int b2X, b2Y;
    private int ballRad, ballX, ballY;

    public PongCanvas() {//Instantiate vars.
        batXDim = 20;
        batYDim = 100;

        b1X = 0;
        b1Y = 0;

        b2X = 0;
        b2Y = 0;

        ballRad = 20;
        ballX = getWidth() / 2;
        ballY = getHeight() / 2;
    }

    public void paint(Graphics g) {//Main paint Method.
        //Cast Graphics to Graphics2D.
        Graphics2D g2 = (Graphics2D) g;
        //Enable antialiasing.
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                RenderingHints.VALUE_ANTIALIAS_ON);
        //Draw background.
        g2.setPaint(Color.black);
        g2.fillRect(0, 0, getWidth(), getHeight());
        //Draw ball.
        g2.setPaint(Color.white);
        g2.fillOval(ballX, ballY, ballRad, ballRad);
        //Draw bat 1.
        g2.fillRect(b1X, b1Y, batXDim, batYDim);
        //Draw bat 2.
        g2.fillRect(b2X, b2Y, batXDim, batYDim);
    }
}

【问题讨论】:

标签: java swing graphics2d paintcomponent


【解决方案1】:

覆盖JComponent 中的getPreferredSize() 以返回您的首选尺寸,并从该Dimension 的一半宽度和高度开始。同样,这个KineticModelDisplayPanel 中调用setPreferredSize()

附录:作为解释,您当前的方法失败了,因为 getWidth()getHeight() 的结果是无效,直到在封闭容器上调用 validate(),通常作为结果pack().

【讨论】:

  • 对不起,我不确定我完全理解你的意思。
  • 通过覆盖paintComponent()getPreferredSize() 这两种方法来更新您的示例。注释 @Override 会很有帮助。
  • 好的,谢谢。一旦我的开发机器启动并再次运行(不断出现内核恐慌),我将进行更改。
【解决方案2】:

我同意trashgod的回答。 (+1)

像这样移动paintComponent(g)中的ballX和ballY

if (ballX==0 && ballY==0) {
    ballX = getWidth()/2;
    ballY = getHeight()/2;
}

【讨论】:

  • +1 建议sentinel value。当然,(0,0) 就变成了一种虫洞的入口!我经常使用Point p;,后来检查if (p == null)初始化起点。
猜你喜欢
  • 2011-05-09
  • 2015-08-07
  • 2013-02-27
  • 1970-01-01
  • 2021-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多