尝试并且无法在已设置的JPanel上绘图

时间:2016-05-20 01:03:17

标签: java swing

我对使用java编码(以及一般编码)非常陌生。我目前正在学校读11年级的CS,但我们所涵盖的一切都非常简单。

为了我们的高潮,我试图制作乒乓球。我意识到我必须使用JPanel来做我想做的事情,但是我们之前只使用过Console,所以我用0知识进入这个。

无论如何,我在使用已经宣布的JPanel时遇到了麻烦。关于如何在JPanel中绘制的每个解决方案或教程包括使用完全不同的类,我不知道如何将其实现到我预先存在的代码中;那是......

import javax.swing.*;
import javax.swing.JFrame;
import java.awt.event.*;
import java.awt.*;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;


public class pong extends JPanel {

    private JFrame f3, f2, f1;
    private JPanel pLabel, pButton, pPong1, pPong2;
    private JButton b1, b2;
    private JLabel lab, score;

    int singleScore = 0;
    int doubleScore1 = 0;
    int doubleScore2 = 0;

    int By;
    int Bx;

    int Paddle1y;
    int Paddle2y;

    public pong()
    {
        gui();
    }

    public void gui()
    {        
        f1 = new JFrame("Pong!");
        f1.setVisible(true);
        f1.setSize(700, 500);
        f1.setResizable(false);
        f1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        pButton = new JPanel();
        pButton.setBackground(Color.BLACK);

        pLabel = new JPanel();
        pLabel.setBackground(Color.WHITE);

        b1 = new JButton("1 Player");
        b1.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                pong1();
            }

        });

        b2 = new JButton("2 Players");
        b2.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                pong2();
            }
        });

        lab = new JLabel("Welcome to Pong!");

        pButton.add(b1);
        pButton.add(b2);

        pLabel.add(lab);

        f1.add(pButton, BorderLayout.SOUTH);
        f1.add(pLabel, BorderLayout.CENTER);
    }

    public void pong1()
    {
        f1.dispose();

        f2 = new JFrame("One Player Pong");
        f2.setVisible(true);
        f2.setSize(700, 500);
        f2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       f2.setResizable(false);

        pPong1 = new JPanel();
        pPong1.setVisible(true);
        pPong1.setBackground(Color.WHITE);

        score = new JLabel("Score = " + singleScore);

        f2.add(pPong1);

        pPong1.add(score, BorderLayout.NORTH);
    }

    public void pong2()
    {
        f1.dispose();

        f3 = new JFrame("Two Player Pong");
        f3.setVisible(true);
        f3.setSize(700, 500);
        f3.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f3.setResizable(false);

        pPong2 = new JPanel();
        pPong2.setVisible(true);
        pPong2.setBackground(Color.WHITE);

        score = new JLabel("Player 1 Score = " + doubleScore1 + "      Player 2 Score = " + doubleScore2);

        f3.add(pPong2);

        pPong2.add(score, BorderLayout.NORTH);
    }

    public static void main(String[] args)
    {        
        new pong();
    } 
}

无论如何,您可以给予我的任何帮助表示赞赏。提前谢谢。

1 个答案:

答案 0 :(得分:2)

您覆盖paintComponent()以绘制内容,并在您想要更新显示时使用repaint()来调用它。 Graphics课程中的方法可以为您提供帮助,例如Graphics.drawLine()Graphics.fillRect()等。

实施示例:https://github.com/Blackop778/Minesweeper/blob/master/src/main/java/blackop778/minesweeper/graphics/MinesweeperPanel.java