Значение кода Graphics2D [дубликат]

Состояние генератора случайных чисел не всегда является просто семенем. Например, безопасный PRNG обычно имеет энтропийный буфер, который представляет собой больший блок данных.

Однако вы можете сохранить и восстановить все состояние генератора числа рандов, чтобы вы могли воспроизвести его результаты позже::

  import random old_state = random.getstate () print random.random () random.setstate (old_state) print random.random () # Вы также можете восстановить состояние в свои собственные  экземпляр PRNG, чтобы избежать проблем с потоковой безопасностью при использовании глобального экземпляра по умолчанию.  prng = random.Random () prng.setstate (old_state) print prng.random ()  

Результаты getstate можно, конечно, мариновать, если вы хочу сохранить его настойчиво.

http://docs.python.org/library/random.html#random.getstate

1
задан sirnomnomz 11 February 2014 в 20:40
поделиться

2 ответа

Вы производите Graphics2D в контекст Graphics g. Подробнее о кастинге здесь, в Inheritance в разделе Casting.

Что это в конечном итоге делает, это использовать доступные методы Graphics2D с контекстом Graphics пройденного к методу paintComponent. Если вы производите кастинг, вы будете ограничены только методами класса Graphics

Graphics2D является подклассом Graphics, поэтому с помощью Graphics2D вы получите все методы Graphics, используя методы в классе Graphics2D.


Боковые заметки

  • Вы не должны переопределять paint. Также, если вы, вы не должны рисовать на контейнерах верхнего уровня, таких как JApplet.
  • Вместо этого нарисуйте JPanel или JComponent и переопределите paintComponent вместо paint и вызовите super.paintComponent. Затем просто добавьте JPanel в родительский контейнер.
    public DrawPanel extends JPanel {
        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            Graphics2D g2 = (Graphics2D)g;
        }
    }
    

См. больше в Пользовательская живопись и Graphics2D

3
ответ дан Paul Samsotha 15 August 2018 в 14:55
поделиться

Да, вы должны включить g.

Когда вы вводите свой метод рисования, у вас есть объект g типа Graphics.

Затем вы присваиваете свой объект Graphics, g типу Graphics2D, который является типом, который расширяет Graphics.

Вы должны включить g, чтобы у вас было что-то типа. Если вы не включаете объект, вы получите ошибку компиляции, потому что оператор не является полным.

Причина, по которой вы приписываете g объекту Graphics2D, заключается в том, что вы сообщаете компилятору: «Этот графический объект на самом деле является объектом Graphics2D». таким образом, вы можете выполнять функции, которые объект Graphics2D имеет, что объект Graphics не делает.

Этот ответ stackoverflow answer очень хорошо объясняет отличные переменные в Java, если у вас есть больше вопросов об этом. И этот ответ stackoverflow answer объясняет, почему безопасно передавать из Graphics в Graphics2D

2
ответ дан Community 15 August 2018 в 14:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: