结合图形对象Jswing

时间:2015-11-06 19:43:16

标签: java swing user-interface

我创建了一个扩展JPanel的新类,其中包含:

public void paintComponent(Graphics g){
super.paintComponent(g);
        g.setColor(Color.WHITE);
        g.drawArc(x,y, width,height,start-angle, end-angle);
        g.drawLine(x1Pos, y1Pos,x2Pos, y2Pos);
        g.drawLine(x1Pos, y1Pos,x2Pos,y2Pos);
    }  

现在我想要的是将这些线,弧和动画组合在一起,而不是为每个线编写代码。像创建这些模块并将它们一起使用的东西。这可能吗? 基本上,将所有这些行组合起来,这样当我编写移动代码时,我不必为每个代码指定代码,而是将它们一起移动。

2 个答案:

答案 0 :(得分:3)

您可以使用BufferedImages。创建一个BufferedImage并在图像上绘制。

BufferedImage img = new BufferedImage(100,100,BufferedImage. TYPE_INT_ARGB);
Graphics2D g2d = (Graphics2D) img.createGraphics();
g2d.fillRect(0,0,60,60); //do stuff with g2d here

然后,使用JPanel将每个BufferedImage绘制到屏幕上

public void paintComponent (Graphics g){
    g.clearRect(0,0,getWidth(),getHeight());
    g.drawImage(img,x,y);
}

答案 1 :(得分:3)

建议:

  1. 请勿使用硬编码的“魔术”数字。例如,不是g.drawLine(100-20, 50, 230-20, 50);
  2. 改用变量。例如,g.drawLine(leftWall-xPos, yPos, rightWall - xPos, yPos);
  3. 您需要一个动画循环来驱动动画。
  4. Swing Timer是一个很好的方法。
  5. 在Timer的ActionListener内部,更改类的字段状态并调用重绘。
  6. 让paintComponent方法使用这些字段而不是硬编码的数字来决定在哪里绘制内容。
  7. 使用BufferedImage绘制“静态”不变的背景图像。
  8. 学习和使用Java命名约定。变量应该都以小写字母开头。