краска () в Java без отображения - PullRequest
0 голосов
/ 27 декабря 2018
import java.util.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;




class game extends JFrame {
    public game(){   //this is constructor
        JFrame frame  = new JFrame();
        frame.setVisible(true);
        frame.setSize(500,500);
        frame.setTitle("Hello world");
    }

    public void paint(Graphics g){
        Graphics2D g2 = (Graphics2D) g;
        Line2D line = new Line2D.Double(60,90,150,100);
        g2.draw(line);


    }


    public static void main(String args[]) {

        game l = new game();

    }


}

Приведенный выше код компилируется в java, но при запуске кода он отображает только фрейм и его заголовок, но не включает какие-либо линии, нарисованные с использованием Graphics2D и Line2D, что является ошибкойсделал???Отображаемый фрейм не показывает никакого содержимого, почему это ???

Ответы [ 3 ]

0 голосов
/ 27 декабря 2018

В вашем методе вызова конструктора класса JFrame используется это ключевое слово, поскольку вы расширяете класс JFrame в своем классе.

public game(){   //this is constructor
/*JFrame frame  = new JFrame();
frame.setVisible(true);
frame.setSize(500,500);
frame.setTitle("Hello world");*/
    this.setVisible(true);
    this.setSize(500,500);
    this.setTitle("Hello world");
}

Это решит вашу проблему.

0 голосов
/ 27 декабря 2018

вам не нужно создавать экземпляр класса JFrame, модифицированный вами конструктор, как показано ниже

public game(){   //this is constructor
   setVisible(true);
   setSize(500,500);
   setTitle("Hello world");
}
0 голосов
/ 27 декабря 2018

Во-первых, вы создаете и отображаете JFrame, который не является экземпляром game, поэтому нет никаких шансов, что он раскрасит то, что у вас есть в game методе *1004*.

*.1006 * Обычно вы вообще не хотите создавать подкласс JFrame для пользовательской рисования, просто создайте подкласс JPanel и установите его в качестве панели содержимого фрейма.

Также не делайте 't переопределить paint, но paintComponent, который является методом, ответственным за рисование текущего компонента.

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

Также условно, имена классов должны начинаться с заглавной буквы.

И последнее: сделайте фрейм видимым только после того, как вы добавили все свои компоненты, или вы можете столкнуться с визуальнымглюки когда-нибудь.

Собираем все вместе:

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Line2D;

import javax.swing.JFrame;
import javax.swing.JPanel;

class Game extends JPanel {

    @Override
    public void paintComponent(final Graphics g) {

        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D) g;
        g2.setColor(Color.BLACK);
        Line2D line = new Line2D.Double(60, 90, 150, 100);
        g2.draw(line);

    }

    public static void main(final String args[]) {

        Game l = new Game();

        JFrame frame = new JFrame();

        frame.setSize(500, 500);
        frame.setTitle("Hello world");

        frame.setContentPane(l);

        frame.setVisible(true);

    }

}
...