Problem mit JPanel - Wann wird size berechnet?

Status
Nicht offen für weitere Antworten.

Espiritu

Mitglied
Hallo!

Ich hab folgendes Problem: Ich hab hier so ein Analyse-Tool geschrieben, das u.a. Balken-Diagramme am Bildschirm anzeigt. Diese Diagramme soll ich jetzt zu einem "Bericht" zusammenfassen und speichern. Die Diagramme sind eine Subklasse von JPanel und diese will ich mit Hilfe eines BufferedImage als JPG abspeichern, um sie in weiterer Folge in ein HTML-File reinklatschen zu können.

Code:
private void exportDiagram(String path, String filename) {
    Component comp = pObj1.getComponent(1);

    if (comp instanceof JPanel) {
      JPanel item1 = (JPanel) comp;

      int w = item1.getWidth();
      int h = item1.getHeight();

      //Bild erstellen
      BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
      Graphics2D big2d = bi.createGraphics();

      //JPanel in das BufferedImage zeichnen
      item1.paint(big2d);

      //Bild als JPG abspeichern
      File file = new File(path + filename);
      try {
	ImageIO.write(bi, "jpg", file);
      }
      catch (Exception e) {
	e.printStackTrace();
      }
    } //if instanceof JPanel

  } //exportDiagram()

Allerdings hab ich das Problem, das mir das Programm ab und zu beim allerersten Diagramm folgende Exception wirft:
Code:
java.lang.IllegalArgumentException: Width (0) and height (0) cannot be <= 0

Das heißt also das erste Diagramm hat eine Höhe und Breite von 0. Nur warum?
Meines Wissens nach übernimmt die Berechnung der size der jeweilige Layout-Manager und da das Diagramm auch vor dem Export angezeigt wird, sollte er auch die Größe berechnet haben, aber offensichtlich werden die Werte gar nicht gesetzt?!?! Wann werden diese Werte denn nun gesetzt bzw. warum bekomme ich da diese Exception? Die Exception tritt, wie gesagt, nur beim ersten Diagramm auf.

Der Vollständigkeit halber noch die restlichen aufgerufenen Methoden. Vielleicht hab ich da ja Mist gebaut ;)

generateHtml wird aufgerufen wenn ich diesen Bericht speichern will.
Code:
public File generateHtml(String title, File file) {

  String htmlHeader = "<html><head><title>" + title + "</title></head><body>";
  String htmlBody = new String();
  String htmlFooter = "</body></html>";

  Vector vHeader = rep.getHeaders();
  Vector vItems = rep.getItems();    //Die Diagramme des Berichts

  for (currPage = 0; currPage < vItems.size(); currPage++) {
    htmlBody += "


" + vHeader.elementAt(0) + "


";
    String filename = "diagram" + currPage + ".jpg";
    this.updatePage();
    this.exportDiagram(file.getAbsolutePath(), filename);
    htmlBody += "<img src=\"" + file.getAbsolutePath() + filename + "\">";
  }

  String html = htmlHeader + htmlBody + htmlFooter;

  //HTML-File speichern
  try {
    FileWriter fw = new FileWriter(file);
    fw.write(html);

    fw.close();
  }
  catch (IOException e) {
    e.printStackTrace();
  }

  return file;

} //generateHtml

Während des Exports wird der Bericht auch angezeigt. currPage ist dabei ein Integer-Zähler, der die aktuelle Bericht-Seite darstellt.
Code:
  private void updatePage() {
    pObj1 = new JPanel(new BorderLayout());
    JPanel pHeader1 = new JPanel();
    Vector repItems = rep.getItems();

    JScrollPane spObj1 = new JScrollPane(pObj1);
    spObj1.setViewportView(pObj1);
    cp.add(spObj1, BorderLayout.CENTER);

    //Header einfügen
    Vector vHeader = rep.getHeaders();
    JLabel lHeader1 = new JLabel( (String) vHeader.elementAt(0));
    pHeader1.add(lHeader1);
    pObj1.add(pHeader1, BorderLayout.NORTH);

    //Diagramm einfügen
    Object repItem1 = repItems.elementAt(currPage);
    if (repItem1 instanceof Diagram) {
      Diagram dia = (Diagram) repItem1;
      pObj1.add(dia.getGui(), BorderLayout.CENTER);
    }

    //Panel neu zeichnen
    cp.getParent().paintComponents(cp.getParent().getGraphics());

  } //updatePage()

Danke schon mal für eure Hilfe!

Mfg,
Ronny
 

dotlens

Top Contributor
versuchs mal mit:
Code:
Component comp = pObj1.getComponent(0);// 0 anstatt 1
 

Espiritu

Mitglied
Nana, das hat mit dem Problem nix zu tun.
pObj1.getComponent(0) == pHeader
pObj1.getComponent(1) == dia.getGui()

Wenn ich getComponent(0) schreiben würde, würde ich das falsche JPanel als JPG abspeichern.
 

dotlens

Top Contributor
kenne ja nicht deine gesammte Struktur ;)
Wird denn nur beim ersten mal die falschen Werte genommen? oder immer die von dem Diagramm, welches eins vorher angezeigt wurde? (würde Sinn machen, denn dadurch hat der erste keiner)
Was aber auch heissen würde dass das Bild vorher gespeichert wird...
 

Espiritu

Mitglied
Also laut Debugger werden zumind. immer die richtigen Panels genommen. Nur manchmal hat das erste Panel size 0 und manchmal eben die "richtige" size. Das Bild wird auch nicht vorher gespeichert...
 

Espiritu

Mitglied
Kann mir da jemand helfen?
Ich finde auch komisch, dass es einmal klappt, einmal wieder nicht. Das reine Glücksspiel irgendwie
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Drag and Drop Problem auf Jpanel AWT, Swing, JavaFX & SWT 2
M Swing JPanel mittig, Problem AWT, Swing, JavaFX & SWT 5
P Problem beim erstellen eines JPanel in einem JFrame AWT, Swing, JavaFX & SWT 7
C Frage/Problem mit Jpanel AWT, Swing, JavaFX & SWT 4
K Canvas3d - JPanel problem AWT, Swing, JavaFX & SWT 4
C Swing Problem mit dem JPanel AWT, Swing, JavaFX & SWT 2
A Problem mit JPanel AWT, Swing, JavaFX & SWT 4
S Swing Problem mit JCheckBox auf JPanel in JScrollPane AWT, Swing, JavaFX & SWT 8
P RAM-Auslastung - Problem. Zeichnen von JPEGs auf JPanel AWT, Swing, JavaFX & SWT 2
D KeyListener Problem bei JPanel wechsel AWT, Swing, JavaFX & SWT 2
Y JPanel problem AWT, Swing, JavaFX & SWT 5
E JPanel in BufferdImage rendern problem AWT, Swing, JavaFX & SWT 2
K Jpanel repaint problem (Fullscreen) AWT, Swing, JavaFX & SWT 5
D Swing Problem mit Scrollbars in einem JPanel eines JWindows AWT, Swing, JavaFX & SWT 4
A Swing JPanel mit GridBagLayout Resize-problem AWT, Swing, JavaFX & SWT 1
W Swing Problem ( JPanel & JButton ) AWT, Swing, JavaFX & SWT 6
S GridBagLayout Problem mit dem JPanel AWT, Swing, JavaFX & SWT 5
M JPanel Layout Problem AWT, Swing, JavaFX & SWT 11
M Problem mit jPanel (FlowLayout) in ScrollPane AWT, Swing, JavaFX & SWT 4
ChaosNo1 Problem mit Komponente auf JPanel adden (beides abgeleitet) AWT, Swing, JavaFX & SWT 4
Noar Problem mit JPanel AWT, Swing, JavaFX & SWT 4
? Problem mit drawImage: bei Frame ok, bei JPanel nicht AWT, Swing, JavaFX & SWT 4
V Bild wird nicht auf JPanel gezeichnet; Java Problem AWT, Swing, JavaFX & SWT 10
B Problem bei der Erstellung einer Bilddatei aus einem JPanel AWT, Swing, JavaFX & SWT 16
G Canvas im JPanel - "Freie" Fläche Problem AWT, Swing, JavaFX & SWT 10
T Editor auf Basis JFrame in ein JPanel wandeln - Problem! AWT, Swing, JavaFX & SWT 5
S Problem mit dem Zeichnen einer Linie auf einem JPanel AWT, Swing, JavaFX & SWT 30
G JPanel Problem mit GridBagLayout AWT, Swing, JavaFX & SWT 4
D Layout Problem / JTree und JPanel AWT, Swing, JavaFX & SWT 4
G Problem mit JPanel und JList AWT, Swing, JavaFX & SWT 3
S Problem mit dem Layout - 3 JPanel's AWT, Swing, JavaFX & SWT 3
G JPanel-Problem AWT, Swing, JavaFX & SWT 4
G Problem mit der Anzeige von jLabel. Unlesbar wenn der Text geändert wird. AWT, Swing, JavaFX & SWT 28
H 2D-Grafik Problem mit Paint AWT, Swing, JavaFX & SWT 1
S Layout - Problem AWT, Swing, JavaFX & SWT 1
Tassos JavaFX/Problem mit der Maussteuerung in Stackpane AWT, Swing, JavaFX & SWT 7
sserio Java Fx - Problem AWT, Swing, JavaFX & SWT 3
A Problem Spiel auf Panel der GUI zu bringen AWT, Swing, JavaFX & SWT 1
A JavaFX Controller Problem AWT, Swing, JavaFX & SWT 1
TheWhiteShadow JavaFX ListView Problem beim Entfernen von Elementen AWT, Swing, JavaFX & SWT 1
E LayoutManager Welcher Layout-Mix löst mein Problem? AWT, Swing, JavaFX & SWT 3
Umb3rus JavaFX Problem mit PropertyValueFactory: can not read from unreadable property AWT, Swing, JavaFX & SWT 1
T Problem mit paintComponent() AWT, Swing, JavaFX & SWT 17
AmsananKING Java Menü-Problem AWT, Swing, JavaFX & SWT 1
K JavaFX Resizing-Problem beim BorderLayout (Center Component) beim Arbeiten mit mehreren FXMLs AWT, Swing, JavaFX & SWT 2
G Instance OF Problem AWT, Swing, JavaFX & SWT 9
FrittenFritze Ein Problem mit der CSSBox, die Größe wird nicht angepasst AWT, Swing, JavaFX & SWT 5
M Problem mit dem Anzeigen von Frames im Vordergrund AWT, Swing, JavaFX & SWT 5
Badebay Problem mit JButton AWT, Swing, JavaFX & SWT 2
newJavaGeek Grid-Layout problem AWT, Swing, JavaFX & SWT 7
J JavaFX Löschen im Tabelview macht Problem AWT, Swing, JavaFX & SWT 15
JavaTalksToMe JavaFx ExekutorService Problem AWT, Swing, JavaFX & SWT 2
Zrebna Problem bei Eventhandling (Value soll nach jedem erneutem Klick gelöscht werden) AWT, Swing, JavaFX & SWT 4
B Problem mit JavaFX AWT, Swing, JavaFX & SWT 5
J css Problem AWT, Swing, JavaFX & SWT 5
B JavaFX habe mein Problem fett markiert AWT, Swing, JavaFX & SWT 2
A Swing Filter-Problem AWT, Swing, JavaFX & SWT 1
temi JavaFX Problem mit IntelliJ und JavaFx 11 unter XUbuntu AWT, Swing, JavaFX & SWT 3
L Java FX Problem mit Ubuntu 18 und JavaFx AWT, Swing, JavaFX & SWT 27
H JTable TableCellEditor-Problem AWT, Swing, JavaFX & SWT 0
kodela Swing Problem mit Warten-Dialog AWT, Swing, JavaFX & SWT 16
B JavaFx Scene Builder Problem AWT, Swing, JavaFX & SWT 2
B [Problem] Java öffnet Word-Datein nicht AWT, Swing, JavaFX & SWT 14
T DataBinding Problem AWT, Swing, JavaFX & SWT 5
Blender3D Problem mit € Symbol Font Gotham Windows 10 Swing AWT, Swing, JavaFX & SWT 11
T Problem mit JTable Sortierung AWT, Swing, JavaFX & SWT 2
J Problem mit Platfrom run later AWT, Swing, JavaFX & SWT 15
J Problem mit Platfrom run later AWT, Swing, JavaFX & SWT 0
D Swing SwingUtils / Thread Problem AWT, Swing, JavaFX & SWT 3
L JavaFX Problem beim Aufrufen einer Methode AWT, Swing, JavaFX & SWT 5
T Swing Problem mit Datum und FormattedTextField AWT, Swing, JavaFX & SWT 2
S AWT Java print dialog Problem AWT, Swing, JavaFX & SWT 0
olfibits JavaFX Problem mit HTMLEditor AWT, Swing, JavaFX & SWT 0
W SWT hover-background-problem with first column in TreeViewer AWT, Swing, JavaFX & SWT 0
M Problem mit Add JScrollPane AWT, Swing, JavaFX & SWT 25
Mario1409 Swing JTextArea scroll Problem AWT, Swing, JavaFX & SWT 0
N Swing Problem mit loop AWT, Swing, JavaFX & SWT 2
S Swing Problem mit Button und ActionListener AWT, Swing, JavaFX & SWT 5
S Swing & Clean und build Problem AWT, Swing, JavaFX & SWT 12
S JLabel setText() Problem AWT, Swing, JavaFX & SWT 6
I 2D-Grafik Problem beim Ändern der Farbe eine 2d Objekts AWT, Swing, JavaFX & SWT 3
G Swing Splitpane Problem AWT, Swing, JavaFX & SWT 1
F Problem mit der FXML Rectangle Shape AWT, Swing, JavaFX & SWT 2
N JavaFX Stranges Problem mit der Autoscroll-Eigenschaft von Textareas AWT, Swing, JavaFX & SWT 0
E Java FX FXML Problem mit html Scriptausführung AWT, Swing, JavaFX & SWT 2
J JavaFX Intersect Problem mit Shapes AWT, Swing, JavaFX & SWT 10
R JavaFX MediaPlayer AVI-Problem AWT, Swing, JavaFX & SWT 1
M Swing Problem mit ListCellRenderer AWT, Swing, JavaFX & SWT 7
D Problem mit JTable AWT, Swing, JavaFX & SWT 1
F GUI Auflösung ändern - Koordianten und Proportions Problem AWT, Swing, JavaFX & SWT 21
J Problem mit Button darstellung AWT, Swing, JavaFX & SWT 23
M Problem mit Layoutmanagern... Hilfe wäre sehr nett. AWT, Swing, JavaFX & SWT 2
S 2D-Grafik Problem mit Variablen AWT, Swing, JavaFX & SWT 4
7 JavaFX Problem beim Zeichnen eines Dreiecks in einem GUI AWT, Swing, JavaFX & SWT 6
M Swing AttributiveCellTableModel addRow() Problem AWT, Swing, JavaFX & SWT 1
J Swing Problem mit Graphics Methode AWT, Swing, JavaFX & SWT 4
N JavaFX Problem mit table multiple selection AWT, Swing, JavaFX & SWT 5
K CheckBox Problem AWT, Swing, JavaFX & SWT 5
Grevak DisplayMode Problem seit Windows 10 AWT, Swing, JavaFX & SWT 2
S Swing Eigene JComboBox Problem! AWT, Swing, JavaFX & SWT 1

Ähnliche Java Themen

Neue Themen


Oben