Вызов перерисовки внутреннего класса не вызывает paint () на самом деле ничего не делает - PullRequest
0 голосов
/ 18 ноября 2018

Я не слишком знаком с JApplet, рисовать и перекрашивать ().Любая помощь приветствуется.

У меня есть внешний класс "A", который расширяет JApplet и рисует некоторые вещи в его краске () У меня также есть закрытый класс "B", который находится внутри A, а также расширяет JApplet и рисует вещив его краске ().A paint () вызывает paint B (), поэтому, когда A запускается, рисуются A и B.

Я использую слушатель мыши, чтобы определить, когда нажата мышь, и именно тогда B должен перерисовать () и нарисовать несколько новыхвещи и удалить старые вещи.

Однако, когда я нажимаю на мою мышь, я вижу, что B repaint () ничего не делает.Я печатаю пару сообщений отладки на консоль и могу сказать, что при вызове B repaint () ничего не происходит, то есть программа должна снова пройти через B paint (), но это не так.

Здесьобщая структура, и снова, любая помощь приветствуется

    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;

    public class A extends JApplet {

        private class B extends JApplet implements  MouseListener{

            public B() { }
            public void paint (Graphics g) {
                // g.drawline ...
                //System.out...
            }

            public void mousePressed(MouseEvent e) {
                //System.out....
                repaint();
            }
            public void mouseReleased(MouseEvent e) {
                //System.out....
                repaint();

            }
            // ... rest of mouse listener interface

        }

        public void init() {
            // setSize() ...
        }


        public  void paint(Graphics g) {
            // g.drawRectange ...
            // Draw other stuff

            B b = new B();
            B.paint(g)
        }
    }

1 Ответ

0 голосов
/ 18 ноября 2018

Проблема в том, что ничто не реагирует на запрос repaint() в вашем классе B.Это может вызвать перерисовку класса B, но это не значит, что класс A перекрашивается, ему никто не сказал.Как вы сказали:

краска А () вызывает краску Б (), поэтому, когда А запускается, рисуются А и Б.

Это верно, но это не такЭто не то же самое, что и наоборот.

Если вы хотите, чтобы класс A перерисовывал свое содержимое, вы должны вызвать repaint() для объекта A, так как это тот класс, который вам нуженбыть перекрашенным.

...