Java-JPanel getGraphics()

Da Java unterstützt nur single inheritance, ich möchte paint direkt auf eine Instanz einer JPanel ist ein Mitglied der Klasse Panel. Ich schnappe mir eine Instanz von Graphics von dem Mitglied und dann malen, was auch immer ich Lust drauf.

Wie kann ich nicht Erben aus JComponent oder JPanel - und immer noch nutzen getGraphics() für die Malerei auf this ohne überschreiben public void paintComponent(Graphics g)?

private class Panel
{
      private JPanel panel;
      private Grahics g;

      public Panel()
      {
           panel = new JPanel();
      }

      public void draw()
      {
           g = panel.getGraphics();
           g.setColor(Color.CYAN);
           g.draw(Some Component);
           panel.repaint();
      }
}

Dem panel Hinzugefügt wird JFrame dass sichtbar gemacht wird, bevor ein Aufruf panel.draw(). Dieser Ansatz ist nicht für mich arbeiten, und das, obwohl ich bereits weiß, wie zu malen, benutzerdefinierte Komponenten durch Erben von JPanel und überschreiben public void paintComponent(Graphics g) ich wollte nicht Erben aus JPanel.

Grundsätzlich sollten Sie nicht verwenden getGraphics. Der Grafik-Kontext zurück aus es ist nicht das gleiche, das paintComponent übergeben. In deinem Fall wahrscheinlich nicht funktioniert, da ruft repaint löscht, was auch immer Sie gemalt. Können Sie erklären, was Sie versuchen zu erreichen? Wie es ist, wie es scheint, ein XY-problem.
Zum Beispiel hier ist eine ähnliche Frage, aber du hast gesagt, dass speziell Sie nicht wollen, um JPanel erweitern und paintComponent überschreiben. Es wäre hilfreich, zu erklären, was Sie tun und warum, so dass Lösungen vorgeschlagen werden können.
Dies ist nicht ein XY-problem, weil ich weiß bereits die Lösung zu meinem problem. Ich möchte nur wissen, wie sich die Verwendung der oben beschriebenen Methodik.
Sie sollten nicht getGraphics. Um ehrlich zu sein, ich bin auch nicht wirklich sicher, warum es existiert in der API. Sobald das panel wird gestrichen (wie das passieren kann, automatisch und zu 100% außerhalb Ihrer Kontrolle liegen) das Bild mit getGraphics wird verschwinden. In der Regel wird die Lösung zu sagen, "nicht getGraphics verwenden, überschreiben paintComponent", aber Sie haben gesagt, Sie wollen das nicht.
Sie können ganz einfach, erstellen Sie zum Beispiel ein BufferedImage zu zeichnen, um außerhalb von paintComponent und dann das Bild zu zeichnen auf dem JPanel. Aber Sie sind nur noch nicht gesagt, was du eigentlich machen willst.

InformationsquelleAutor Mushy | 2014-01-24

Schreibe einen Kommentar