Hallo!
Das ist das erste Mal, dass ich mich mit Grafik-Programmierung in diesem Maße beschäftige, also bin ich noch relativ unerfahren.
Ich will auf einem JPanel netPanel, das in einem JSrcollPane netScrollPane liegt, untereinander Bilder anzeigen, die jedoch in einem längeren rechenintensiven Prozess erst erzeugt werden. Auch Beschriftungen der Bilder sind vorgesehen.
Die Bilder werden soweit angezeigt, diese sind jedoch so groß, dass die JScrollPane zum Einsatz kommt und den horizontalen Scroll-Balken anzeigt. Bis dahin klappt alles.
Jedoch bekomme ich es nicht hin, dass man auch den Scroll-Balken ziehen kann, ohne dass das alles Gezeichnete im JPanel auf nimmer-Wiedersehen verschwindet.
Dazu versuche ich die paintComponent(Graphics g) des JPanels zu überschreiben und mittels eines ChangeListeners an den ScrollBars repaint() aufzurufen, jedoch ist mir schleierhaft, wie ich das eben gezeichnete Bild wieder hineinbekomme, ohne dass meine Ordnung (Beschriftung, Bild, Beschriftung, Bild, ...), die mit komplett mit einem Graphics-Objekt gezeichnet wird, wieder kaputt geht.
Dazu muss man wissen, dass ich die einzelnen Bilder nicht vorliegen habe, weil sie wie gesagt erst zur Laufzeit generiert werden.
Hier mal etwas Code:
Ich glaube mein Brocken ist gar nicht so groß, wie er aussieht, habe aber zu wenig Kenntnisse über Graphics-Objekte. Speichern sie alles, was mit ihnen gezeichnet wurde? Dies war meine Annahme, die zu Zeile 10 führte....
Vielen Dank im Voraus!
jprojektor
Das ist das erste Mal, dass ich mich mit Grafik-Programmierung in diesem Maße beschäftige, also bin ich noch relativ unerfahren.
Ich will auf einem JPanel netPanel, das in einem JSrcollPane netScrollPane liegt, untereinander Bilder anzeigen, die jedoch in einem längeren rechenintensiven Prozess erst erzeugt werden. Auch Beschriftungen der Bilder sind vorgesehen.
Die Bilder werden soweit angezeigt, diese sind jedoch so groß, dass die JScrollPane zum Einsatz kommt und den horizontalen Scroll-Balken anzeigt. Bis dahin klappt alles.
Jedoch bekomme ich es nicht hin, dass man auch den Scroll-Balken ziehen kann, ohne dass das alles Gezeichnete im JPanel auf nimmer-Wiedersehen verschwindet.
Dazu versuche ich die paintComponent(Graphics g) des JPanels zu überschreiben und mittels eines ChangeListeners an den ScrollBars repaint() aufzurufen, jedoch ist mir schleierhaft, wie ich das eben gezeichnete Bild wieder hineinbekomme, ohne dass meine Ordnung (Beschriftung, Bild, Beschriftung, Bild, ...), die mit komplett mit einem Graphics-Objekt gezeichnet wird, wieder kaputt geht.
Dazu muss man wissen, dass ich die einzelnen Bilder nicht vorliegen habe, weil sie wie gesagt erst zur Laufzeit generiert werden.
Hier mal etwas Code:
Java:
private JScrollPane netScrollPane;
private JPanel netPanel;
private Graphics g; // global: ich will immer dasselbe Objekt zum Zeichnen verwenden
private int vertPos; // vertikale Zeichenposition zum Untereinanderzeichnen in netPanel
// im Konstruktor
netPanel = new JPanel(){
protected void paintComponent(Graphics f){
super.paintComponent(g); // Hier mit dem globalen Graphics arbeiten! (Macht das Sinn?)
}
};
netScrollPane = new JScrollPane(netPanel);
ChangeListener chali = new ChangeListener(){
@Override
public void stateChanged(ChangeEvent arg0) {
netPanel.repaint();
}
};
netScrollPane.getVerticalScrollBar().getModel().addChangeListener(chali);
netScrollPane.getHorizontalScrollBar().getModel().addChangeListener(chali);
// andere Methode: Erzeugen der Bilder und Zeichnen auf netPanel
g = netPanel.getGraphics();
BufferedImage img = ImageIO.read(imgFile);
netPanel.setSize(new Dimension(img.getWidth(), vertPos + img.getHeight())); // die Größe des Panels wird der des Bildes angepasst
netPanel.setPreferredSize(new Dimension(img.getWidth(), vertPos + img.getHeight()));
g.drawImage(img, 5, vertPos, null);
vertPos += img.getHeight() + 20;
Ich glaube mein Brocken ist gar nicht so groß, wie er aussieht, habe aber zu wenig Kenntnisse über Graphics-Objekte. Speichern sie alles, was mit ihnen gezeichnet wurde? Dies war meine Annahme, die zu Zeile 10 führte....
Vielen Dank im Voraus!
jprojektor