Java 组件大小问题
我有一个Java 组件大小问题,java,swing,graphics2d,paintcomponent,Java,Swing,Graphics2d,Paintcomponent,我有一个JComponent子类,用于在屏幕上绘制形状。在构造函数中,我试图将ballX和ballY设置为JComponent的X和Y大小值的一半,我认为我做得不对。我现在已经查了很多,找不到补救办法。代码如下。请记住,这是我第一次真正的Swing/Graphics2D项目 public class PongCanvas extends JComponent { //Vars to hold XY values and Dimension values. private int bat
JComponent
子类,用于在屏幕上绘制形状。在构造函数中,我试图将ballX
和ballY
设置为JComponent
的X和Y大小值的一半,我认为我做得不对。我现在已经查了很多,找不到补救办法。代码如下。请记住,这是我第一次真正的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);
}
}
覆盖JComponent
以返回首选尺寸,并从该维度的一半宽度和高度开始。为此,这将调用中的setPreferredSize()
附录:作为解释,您当前的方法失败了,因为getWidth()
和getHeight()
的结果是无效的,直到在封闭容器上调用了validate()
,通常是由于以下原因。我同意垃圾神的答案。(+1)
像这样移动喷漆组件(g)
中的ballX和ballY
if (ballX==0 && ballY==0) {
ballX = getWidth()/2;
ballY = getHeight()/2;
}
“Swing程序应该重写paintComponent()
而不是重写paint()
”。很抱歉,我不确定我是否完全理解您的意思。请通过重写两个方法更新示例,paintComponent()
和getPreferredSize()
。注释@Override
会很有帮助。好的,谢谢。一旦我的开发机器启动并再次运行,我将进行更改(不断地出现内核恐慌)。+1用于建议一个新的解决方案。当然,(0,0)
就变成了一种虫洞的入口!我经常使用点p
然后检查if(p==null)
以初始化起点。