在其他函数中使用drawLine函数

时间:2016-08-27 08:29:24

标签: java swing draw

我正在制作一个游戏,我需要绘制一些线条和点。我有一个名为paintDot的通用函数(下面的检查代码),我想在不同的函数中调用它。我不知道怎么称呼它,有什么帮助?

public void paintDot (Graphics g, int x, int y)
{
    super.paintComponent(g);
    g.setColor(Color.BLACK);
    g.fillOval(x,y,15,15);

}

这是我需要调用绘图函数的另一个函数/方法: ATM的坐标只是硬编码所以我知道它的工作正常。

正如您所看到的,我正在使用错误的争论来调用paintDot方法。不知道应该在Graphics g

放置什么参数
private void gameWindow (int dif)
{
    this.removeAll();

    areaImage = new JPanel ();
    //distance between points = 75
    //point grid = 7*6
    areaImage.setBounds(50,50,675,600);
    areaImage.setBackground(Color.WHITE);
    areaImage.setBorder(BorderFactory.createLineBorder(Color.black));
    add(areaImage);

    answer = new JTextField();
    answer.setBounds(835,200,150,50);
    answer.setBorder(BorderFactory.createLineBorder(Color.black));
    answer.setHorizontalAlignment(JTextField.CENTER);
    answer.setFont(new Font("Verdana", Font.BOLD, 20));
    add(answer);

    info= new JLabel ("Write your answer here:");
    info.setBounds(830,155,250,50);
    info.setFont(new Font("Verdana", Font.BOLD, 12));
    add(info);

    checkAnswer = new JButton ("Check Answer");
    checkAnswer.setBounds(835,310,150,50);
    checkAnswer.addActionListener(this);
    add(checkAnswer);

    next = new JButton ("Next");
    next.setBounds(835,410,150,50);
    next.addActionListener(this);
    add(next);

    end = new JButton ("End Game");
    end.setBounds(835,510,150,50);
    end.addActionListener(this);
    add(end);

    revalidate();
    repaint();

    int x = 75,y=75;
    for(int num=0;num<6;num++)
    {
        for(int xx=0; x<7;xx++)
        {
            paintDot (areaImage,x,y); // here is the problem
            x=x*2;
        }
        y=y*2;
    }
}

3 个答案:

答案 0 :(得分:2)

  

我有一个名为paintDot的通用函数(下面检查代码),我想用不同的函数调用它

你做不到。

绘画只能在paintComponent()方法中完成。

您应该从不直接调用paintComponent()

所有绘画代码必须属于paintComponent()方法。

如果你想画7个点。然后,绘图代码必须paintComponent()方法中,这意味着循环代码将在paintComponent()方法中,然后您通过循环调用paintDot(...)方法。必须完成点的绘制每次时间Swing确定需要重新绘制组件。

您已经就此主题提出了几个问题,答案总是一样的。阅读您给出的教程链接并按照示例进行操作。该教程绘制了一个正方形,但绘制7个点的概念类似。

再次阅读教程,下载代码并使用工作示例。首先更改教程代码以绘制7个点。一旦了解了它的工作原理,就可以将逻辑添加到实际代码中。

教程链接是给你的原因。如果在教程中有一些你不理解的东西,那么问一个问题,但是不要发布看起来与教程中的示例完全不同的代码,并想知道为什么它不起作用!

答案 1 :(得分:1)

你有这个:

for(int xx=0; x<7;xx++)

你有一个名为xx的索引,你试着做一个循环。问题是您要测试x < 7而不是xx < 7,并且由于x大于7,您将永远不会进入for

答案 2 :(得分:0)

您可以扩展JPanel并覆盖绘图功能,例如paintComponent(Graphics g)(感谢camickr)或paintAll(Graphics g) (我相信)方法。 您可能还想添加带有BufferedImage using createGraphics()

的JLabel

请注意,如果你想制作一个成熟的游戏,你需要一个游戏循环和其他东西,没有图书馆这不好玩。 这不是无耻自我推销的尝试,而是一个建议。

IF 你需要一个游戏循环,画布,多个屏幕和东西, 图书馆可能是最佳选择。 我让图书馆j2D制作2D游戏。