JComponent大小问题
我有一个 JComponent
子类,用于在屏幕上绘制形状。在构造函数中,我尝试将 ballX
和 ballY
设置为 X 和 Y 大小值的一半JComponent
,我认为我做错了。我现在查了很多资料,还是找不到解决办法。代码如下。请记住,这是我第一次真正的 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);
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
覆盖
getPreferredSize()
在您的JComponent
中返回您的首选尺寸,并从该Dimension
的宽度和高度的一半开始。为了达到同样的目的,此KineticModel
会调用setPreferredSize rel="nofollow">
显示面板
。附录:作为解释,您当前的方法失败,因为
getWidth()
和getHeight()
的结果在validate 之前无效 ()
已在封闭容器上调用,通常是pack()
。Override
getPreferredSize()
in yourJComponent
to return your preferred size, and start with half the width and height of thatDimension
. To the same end, thisKineticModel
invokessetPreferredSize()
inDisplayPanel
.Addendum: By way of explanation, your current approach fails because the results from
getWidth()
andgetHeight()
are invalid untilvalidate()
has been called on the enclosing container, typically as the result ofpack()
.我同意垃圾神的回答。 (+1)
在
paintComponent(g)
中移动 ballX 和 ballY,如下所示I agree with trashgod's answer. (+1)
Move the ballX and ballY in the
paintComponent(g)
like this