Java - 使用类对象绘制

时间:2016-01-18 05:53:49

标签: java class jframe paint

我正在为我正在制作的课程构建游戏,我需要绘制一些圆形和矩形。我的问题是根据用户输入,每个圆圈和矩形都会有未知数量。例如,如果用户说5,则会有25个圈子。我想做的是创建一个圆类和矩形类,这样我就可以使用循环来改变x和y坐标。

是否可以使用参数化构造函数(x和y坐标)创建这样的类"circle"和类"rectangle"来实现此目的?

仅供参考 - 这是一个pegboard游戏,你将球放在顶部,球从钉子上弹起,直到被长方形支架夹住。我相信这个游戏的真名叫pachinko。与此图像类似,但只是一个矩形而不是三角形设置。

https://i.ytimg.com/vi/b3B8qiXyTJ8/maxresdefault.jpg

最后,我必须只使用swing和/或javafx(我不熟悉)

3 个答案:

答案 0 :(得分:1)

实际上,您可以为Rectangle和Circle创建类,每个类都有各自的x和y坐标。这样的类可能看起来像这样:

public class Rectangle
{
    int x;
    int y;

    public Rectangle(int x, int y)
    {
        this.x = x;
        this.y = y;
    }
}

如果要创建此类的新实例,只需使用:

Rectangle myRect = new Rectangle(0,25);

上面的代码将创建一个Rectangle的实例,其x和y坐标分别设置为0和25。

希望这有帮助。

编辑1

你的循环可以做这样的事情来按照你的建议在循环中启动你的矩形:

Rectangle[] myRectangles = new Rectangle[25];
int x = 0;
int y = 0;
for (int i = 0; i < 25; i++)
{
    x = x+25;
    y = y+20;
    myRectangles[i] = new Rectangle(x,y);
}

答案 1 :(得分:0)

好的伙计们,我想出了这个。对于我想做的事情,我只需要在另一个类中使用paintComponent()方法,然后让我的另一个类Ball()通过在我的paintBall()方法参数中请求一个Graphics对象来使用这个paintComponent() ,然后使用此图形对象绘制我的Ball类对象。我的回答似乎很冗长,但看​​看下面的Ball类,你就可以得到它。

package main;
import java.awt.Graphics;

public class Ball{

private int x = 5;  
private int y = 30;  

// This method will help to animate the current object,
// The xPos and yPos will change, then frame will be repainted
public void setPos(int xPos, int yPos)
{
    x = xPos;
    y = yPos;
}

public void drawBall(Graphics g)
{
    g.setColor(Color.GREEN);
    g.fillOval(x, y, 30, 30);
}

}

所以基本上,我只需要在我的主类中创建一个Ball实例,就像这样:

Ball myBall = new Ball();

myBall.drawBall(克); //其中g是主类中paintComponent()的图形对象。

答案 2 :(得分:0)

不,你永远不会错过使用paintComponent(); 玩弄这个。     包宠物;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.IOException;
import javax.swing.*;


public class pet extends JPanel implements MouseListener{
public static JFrame frame = new JFrame("frame");
public pet() throws IOException{
 setPreferredSize(new Dimension(870, 675));         //configuring panel
 addMouseListener(this);
}
public static void main(String[] args) throws IOException{
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JComponent newContentPane = new pet();
    newContentPane.setOpaque(true);
    frame.setContentPane(newContentPane);
    frame.pack();
    frame.setVisible(true);
    frame.addMouseListener(new pet());
}
public void paintRectangleAtPoint(Graphics g, int x, int y, String shoutout){
g.setColor(Color.BLACK);
g.drawRect(x, y, 100,100);
System.out.println("See, you can send variables in, too "+ shoutout");
}
public void paintStuff(Graphics g, int x, int y){
g.setColor(Color.BLACK);
g.drawOval(x, y, 100,100);
}
@Override
public void mouseClicked(MouseEvent e) {
paintStuff(frame.getGraphics(),e.getX(), e.getY());
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
PaintRectangleAtPoint(frame.getGraphics(),100, e.getY(), "entered");
}
@Override
 public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
}