Announcement

Collapse
No announcement yet.

paint in BufferedImage Problem

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • paint in BufferedImage Problem

    Hallo Zusammen,
    ich möchte alle Zeilen einer JList als BufferdImage haben. Dafür habe ich folgenden Code geschrieben:
    Code:
    ArrayList<BufferedImage> cellImgs = new ArrayList<BufferedImage>();
     
    for(int i = 0; i < list.getModel().getSize(); i++) {
      Component  c = list.getCellRenderer().getListCellRendererComponent(list,   list.getModel().getElementAt(i), i, false, false);
      c.setSize(new Dimension(list.getFixedCellWidth(), list.getFixedCellHeight()));
      BufferedImage img = new BufferedImage(c.getWidth(), c.getHeight(), BufferedImage.TYPE_INT_RGB);
      Graphics2D g2 = img.createGraphics();
      c.paint(g2);
      g2.dispose();
      cellImgs.add(img);
    }
    Das Ergebnis: Die Images enthalten mehere Zeilen übereinader gelagert (Siehe Anhang). Kann mir jemand sagen, wo mein Fehler liegt?

    Grüße,

    Thomas
    Attached Files

  • #2
    Hallo Thomas,

    das ist schon richtig so. Zunächst betrachtet Swing einen CellRenderer gar nicht als richtige Komponente (obwohl gerne JLabel verwendet wird). Die Tabelle/Liste/ComboBox nutzt einen Renderer nur als rohes "Zeichen-Objekt". Du solltest daher nach einem Zeichnen über c.paint(g2) den Grafikkontext mit translate() verschieben, so dass die nächste Zeichenoperation um "Listenelementhöhe" Pixel unter das vorher gezeichnete kommt.

    Grüße

    Christian

    Comment


    • #3
      Hallo Christian,
      vielen Dank für die Antwort. Leider habe ich es nicht hinbekommen. Der Grafikkontext wird doch für jedes Image neu erzeugt oder zurückgegeben. Wenn ich den alten Kontext "verschiebe", habe ich das gleiche Resultat.

      Grüße,

      Thomas

      Comment

      Working...
      X