Почему моя Java программа обновляет sh каждый раз, когда я сворачиваю окно? - PullRequest
0 голосов
/ 27 марта 2020

Я делаю дворцовую игру, чтобы понять и лучше программировать в Java. Хотя я столкнулся с проблемой, когда каждый раз, когда я минимизирую экран, переменная, которая выбирает изображение карты, постоянно обновляется. Например, функция рандомизации, которую я имею, заставляет переменную выбирать карту в зависимости от ди git, а затем отображает ее, но она меняется каждый раз, когда я минимизирую страницу и открываю ее снова. Я пытался найти ответ на свою проблему, но я не смог его найти. Мой код для того, что я делаю, находится в предыдущем вопросе, который я задал. Мой вопрос заключается в том, как мне остановить обновление переменных при каждом сворачивании страницы?

Редактировать: я только что понял, что это также меняется каждый раз, когда я перемещаю окно курсором, если это помогает.

Это моя функция рандомизации:

public void randomizer() {
        Random rand = new Random();
        int rand_int1 = rand.nextInt(15-1)+1;
        System.out.print(rand_int1);
        if (rand_int1 == 1) {
            setVariables(aceClover);

        }else if (rand_int1 == 2) {
            setVariables(twoClover);
        }else if (rand_int1 == 3) {
            setVariables(threeClover);
        }else if (rand_int1 == 4) {
            setVariables(fourClover);
        }else if (rand_int1 == 5) {
            setVariables(fiveClover);   
        }else if (rand_int1 == 6) {
            setVariables(sixClover);
        }else if (rand_int1 == 7) {
            setVariables(sevenClover);
        }else if (rand_int1 == 8) {
            setVariables(eightClover);
        }else if (rand_int1 == 9) {
            setVariables(nineClover);
        }else if (rand_int1 == 10) {
            setVariables(tenClover);
        }else if (rand_int1 == 11) {
            setVariables(jackClover);
        }else if (rand_int1 == 12) {
            setVariables(queenClover);
        }else if (rand_int1 == 13) {
            setVariables(kingClover);
        }else {
            System.out.println("Couldn't return any Cards!");
        }
    }
package MainClasses;
import java.awt.*;
import java.io.*;
import java.util.Random;

import javax.imageio.ImageIO;

public class DrawBoard extends Component{
    AllCards accessor = new AllCards();
    public void paint(Graphics g) { // function to draw onto the window
    Graphics2D g1 = (Graphics2D)g; // the component being used to access and write to the window
    g1.clearRect(0, 0, getWidth(), getHeight()); // clears rectangle every frame
    g1.setBackground(Color.green); // sets background color
    accessor.randomizer();
    g1.drawImage(accessor.imageExtract, 100, 100, null);
    }   
}

Если вам нужен остаток кода в этом вопросе:

Полный код

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

1 Ответ

4 голосов
/ 27 марта 2020

Поскольку вы вызываете рандомизатор из метода рисования, и этот метод вызывается каждый раз, когда gui минимизируется и восстанавливается, или каждый раз, когда его размер изменяется.

решение: не для этого не нужно иметь никаких программных логик c в методе рисования, а вместо этого * * код рисования.

Вместо:

  • Сделать вызов из конструктора класса, который вызывается только один раз

Также:

  • Не расширяйте Component, а скорее JPanel (не смешивайте компоненты AWT и Swing)
  • Рисование в методе JPCanel paintComponent
  • Вызовите метод рисования super в рамках переопределения super.paint(g), если вы переопределяете краску, или super.paintComponent(g), если вы переопределяете paintComponent. Это позволяет рисовать «домашнее хозяйство», включая удаление «грязных» пикселей.
...