AWT: я пытаюсь изучить Java и не смог понять следующую программу - PullRequest
0 голосов
/ 30 сентября 2018
  1. Что такое "new MyCanvas ()" в f.add (new MyCanvas ());
  2. Как мы получили овал, даже если метод paint () не вызывается ни в конструкторе класса CanvasExample, ни в методе main ()
  3. Что такое новый CanvasExample () в main () метод

import java.awt.*;

public class CanvasExample {  
    public CanvasExample() {  
        Frame f = new Frame("Canvas Example");  
        f.add(new MyCanvas());  
        f.setLayout(null);  
        f.setSize(400, 400);  
        f.setVisible(true);  
    }  

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

class MyCanvas extends Canvas {  
    public MyCanvas() {  
        setBackground (Color.GRAY);  
        setSize(300, 200);  
    }

    public void paint(Graphics g){  
        g.setColor(Color.red);  
        g.fillOval(75, 75, 150, 75);  
    } 
}

Пожалуйста, объясните

Ответы [ 2 ]

0 голосов
/ 30 сентября 2018

Надеюсь, вы поймете: D

сначала он вызывает public static void main(String args[])
, а затем main создает новый экземпляр класса CanvasExample и вызывает его конструктор CanvasExample()

этот конструктор создает новый экземпляр класса Frame с именем "f" и вызывает конструктор класса Frame он устанавливает заголовок этого кадра равным "Canvas Example"
в следующей строке конструктора CanvasExample() он создает и добавляет новыйэкземпляр класса MyCanvas для экземпляра Frame с именем "f"
третья строка конструктора CanvasExample() он просто устанавливает Layout для "f" равным null
четвертая строка конструктора CanvasExample() он устанавливаетразмер от "f" до 400x400
пятая строка конструктора CanvasExample() он просто показывает "f" на экране (чтобы вы могли видеть его)
и конец конструктора CanvasExample() возвращается к main

при создании нового экземпляра класса MyCanvas вызывается его конструктор, и этот конструктор устанавливает для него фон "Color.GRAY" и его размер 300x200, а для всего MyCanvas() конструктор

каждый раз, когда "f" нужно визуализировать снова, он вызывает метод paint(Graphics g) экземпляракласс MyCanvas бит этого экземпляра меньше, чем "f", так что вы можете видеть белый цвет за
, который белый является фоном "f"

Я думаю, это все, что вы просите.
имеетхороший день

0 голосов
/ 30 сентября 2018
  1. Это экземпляр класса Canvas.В Java new - это ключевое слово, используемое для создания объекта (экземпляр данного класса).При этом new Canvas() создает новый экземпляр класса Canvas.Скобки после имени класса указывают на конструктор - блок кода, который вызывается, когда вы хотите создать объект данного типа.

  2. Вы получили овал, потому что метод paint былназывается .Это просто не было вызвано явно из вашего кода.Как вы можете прочитать в этой учебной статье, опубликованной Oracle , метод paint всегда будет запускаться как так называемый «механизм обратного вызова».Этот метод относится к классу Container.Я предлагаю прочитать документы об этом .Метод paint в классе MyCanvas переопределяет метод paint из Canvas.При расширении класса Canvas и переопределении метода paint вы всегда должны вызывать метод super в начале вашего метода.Вы можете прочитать почему в ссылках, которые я уже включил в этот пункт.

  3. Как и в пункте № 1 - new CanvasExample() создает новый экземпляр класса MyCanvas.Более конкретно, он вызывает конструктор (public CanvasExample() { ... }).В представленном вами коде конструктор CanvasExample создает новый объект типа Frame и вызывает некоторые его методы.Один из этих методов - add, и он унаследован классом Frame от своего суперкласса - Container.
    Как объясняет Java awt API , метод add:

    добавляет указанный компонент в конец этого контейнера.

...