Я работал над попыткой создать специфичную для Simon Say игру, пытаясь устранить некоторые ошибки при использовании Graphics 2D - PullRequest
0 голосов
/ 01 ноября 2019

По какой-то причине Graphics2D не будет генерировать фон, который я пытаюсь установить. Я думаю, проблема в том, что рендерер отправляет информацию Саймону в основной класс. Я не могу найти решение и искал часы в Интернете. Если кто-то хорошо знает графику 2D или видит проблему с кодом и может помочь, это будет с благодарностью.

package Simon;

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.Timer;

public class TestingSimon implements ActionListener {

    //Creating object simon
    public static TestingSimon simon;
    //Making integers for Width and Height for JFrame
    public static final int WIDTH = 800, HEIGHT = 800;
    //making a renderer for graphics2D
    public Renderer renderer;

    public TestingSimon() {
        //Creating JFrame 
        JFrame frame = new JFrame("Simon Says");
        //using animation for a timer
        Timer timer = new Timer(20,this);

        //assigning renderer to the method I create in java class Renderer
        renderer = new Renderer();

        //setting a size for the JFrame
        frame.setSize(WIDTH + 15, HEIGHT + 35);
        frame.setVisible(true);
        frame.add(renderer);
        frame.setResizable(false);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        timer.start();
    }


    public static void main(String[] args) {
        simon = new TestingSimon();
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        //setting it to repaint when action event occurs
        renderer.repaint();
    }

    public void paint(Graphics2D g) {
        //trying to set background to grey using Graphics2D
        g.fillRect(0, 0, WIDTH, HEIGHT);
        g.setColor(Color.GRAY);
    }
}

//Java package Renderer
package Simon;

import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JPanel;


/**
 *
 * @author chasepflueger
 */
@SuppressWarnings("serial")
//extending JPanel
public class Renderer extends JPanel
{

    /**
     *
     * @param g
     */
    //trying to implement paintComponent to Simon
    @Override
   public void paintComponent(Graphics g){
       super.paintComponent(g);

       if(TestingSimon.simon != null)
       {
       TestingSimon.simon.paint((Graphics2D) g);
       }
   }
}

1 Ответ

0 голосов
/ 01 ноября 2019

// пытаемся установить серый фон с помощью Graphics2D

Рисование фона компонента уже поддерживается всеми компонентами Swing. Все, что вам нужно сделать, это установить цвет фона:

renderer = new Renderer();
renderer.setBackground(Color.GREY); // also try Color.RED to see the difference

Рисование является функцией компонентов Java:

public void paint(Graphics2D g) {
    //trying to set background to grey using Graphics2D
    g.fillRect(0, 0, WIDTH, HEIGHT);
    g.setColor(Color.GRAY);
}

Вы не можете просто добавить метод в любой класс и ожидать рисования вработай. Ваш TestingSimon класс не является Компонентом, поэтому он ничего не делает. Избавьтесь от кода.

Прочтите раздел из учебника Swing по Custom Painting для получения дополнительной информации и рабочего примера, с которым вы можете скачать и поиграть, чтобы изучить основы.

...