Как я могу показать случайное число от 1 до 10 с graphics2D? - PullRequest
0 голосов
/ 24 сентября 2019

Я думаю о том, как его создать, я могу сделать это с System.out.println в потоке, это хорошо работает, но я спрашиваю, как показывать случайные данные каждую секунду, с помощью метода Graphics2D кто-нибудь может помочь?

вот что я сделал:

String[] numbers= {"1","2", "3", "4", "5", "6", "7", "8", "9", "10"};
int random = (int) (Math.random()*numbers.length);

//here's the part I struggle
public void paint (Graphics g) {
    g2.setColor(Color.black);
    g2.drawString("The number is below", 50, 70);

    //won't run
    g2.draw(numbers, 50, 90);
}

Ответы [ 2 ]

1 голос
/ 24 сентября 2019

Вы можете создать панель, которая генерирует случайное число от минимального значения до максимального значения.

Во-первых, это неверно.Вы правильно использовали drawString в вызове прямо перед этим.

g2.draw(numbers, 50, 90); // draw is not a method of Graphics2D

Во-вторых, если ваш массив не будет чем-то отличным от целых чисел, вы можете просто отобразить случайное значение как-is.

String.format("%d", getRandomInteger()) // Display a random number as a string

Наконец, в JComponent (свинг) вы должны переопределить paintComponent, а не paint.В вашем примере вы можете просто использовать стандартную графику (g.drawString).

@Override
protected void paintComponent(Graphics g) {
    Graphics2D g2 = (Graphics2D) g; // Optional, has more methods

}
import java.awt.*;
import javax.swing.*;

public class RandomNumberPanel extends JPanel {
    private static final long serialVersionUID = -4376447503776020320L;
    private int min;
    private int max;

    public RandomNumberPanel() {
        this(0, 10);
    }

    public RandomNumberPanel(int max) {
        this(0, max);
    }

    public RandomNumberPanel(int min, int max) {
        this.min = min;
        this.max = max;
    }

    public int getRandomInteger() {
        return getRandomInteger(min, max);
    }

    @Override
    protected void paintComponent(Graphics g) {
        Graphics2D g2 = (Graphics2D) g;
        g2.setColor(Color.BLACK);
        g2.drawString("The number is below", this.getWidth() / 4, this.getHeight() / 3);
        g2.drawString(String.format("%d", getRandomInteger()), this.getWidth() / 2, this.getHeight() / 2);
    }

    public static final int getRandomInteger(final int max, final int min) {
        return ((int) (Math.random() * (max - min))) + min;
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame mainFrame = new JFrame();
                JPanel panel = new RandomNumberPanel(1, 10); // [1, 10]

                panel.setPreferredSize(new Dimension(200, 100));
                mainFrame.setContentPane(panel);
                mainFrame.pack();
                mainFrame.setLocationRelativeTo(null);
                mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                mainFrame.setVisible(true);
            }
        });
    }
}

1 голос
/ 24 сентября 2019

Метод draw в Graphics2D занимает Shape, а не String.Вы должны использовать метод drawString.

При использовании метода drawString вам необходимо преобразовать свои значения в String.Вы можете использовать String.join(", "numbers).Однако, если вы хотите показать значение random, а не числа, которые вы можете использовать для преобразования String.valueOf(random).

Изменения в вашем коде будут

g2.drawString(String.join(", ", numbers), 50, 90);

или

g2.drawString(String.valueOf(random), 50, 90);
...