vfl_freak
Premium-User
Moin zusammen,
habe als Java-Neuling ein unschönes Problem mit der Anzeige von mehreren Bilder in einem eigenen Panel.
Ich habe hier eine bestehende Anwendung übernommen, in der bei bestimmten Aktionen an einer definierten Stelle (eigenes Panel) einzelne Webcam-Bilder dargestellt werden!
Nun soll diese Logik dahingehend erweitert werden, dass in einem bestimmten Zustand (Button-Click) alle 'restlichen' zugehörigen Bildnamen auf einmal bestimmt und nacheinander in einer Schleife dargestellt werden!
Leider scheitert dieser Aufbau daran, dass stets nur das Letzte dieser ermittelten Bild angezeigt wird
!
Hier zunächst mal die (wie ich hoffe) relevanten Code-Ausschnitte:
Grundsätzlich klappt das holen einzelner Bilder (zuvor an anderer Stelle in einem Timer) mit den genannten Funktionen sehr zuverlässig! Wenn ich aber, wie hier beschrieben, mehrere Bilder nacheinander anzeigen will, kommt immer nur das Letzte! Allerdings habe ich gestern Abend im Debugger festgestellt, dass die ganzen 'repaint'-Geschichten nicht wirklich das Gewünschte auslösen, sondern das die Anzeige dieses letzten Bildes erst deutlich nach Verlassen des "...actionPerformed" passiert -- irgendwo in den Untiefen irgendwelcher Event-Handler .....
Bin leider ziemlich ratlos, wie ich dies hinbekommen soll?

Ich hoffe, dass meine Code-Auszüge zum Nachvollziehen des Problems ausreichen ...
Bin selbst mit meinem Latein (sprich: Java-Kenntnissen) ziemlich am Ende
Hat irgendwer hierzu eine Idee
Gibt es vielleicht sowas, wie eine Refresh-Funktion o.ä.?
Danke im voraus für Vorschläge!
LG aus OS
Klaus
habe als Java-Neuling ein unschönes Problem mit der Anzeige von mehreren Bilder in einem eigenen Panel.
Ich habe hier eine bestehende Anwendung übernommen, in der bei bestimmten Aktionen an einer definierten Stelle (eigenes Panel) einzelne Webcam-Bilder dargestellt werden!
Nun soll diese Logik dahingehend erweitert werden, dass in einem bestimmten Zustand (Button-Click) alle 'restlichen' zugehörigen Bildnamen auf einmal bestimmt und nacheinander in einer Schleife dargestellt werden!
Leider scheitert dieser Aufbau daran, dass stets nur das Letzte dieser ermittelten Bild angezeigt wird

Hier zunächst mal die (wie ich hoffe) relevanten Code-Ausschnitte:
Java:
// Klasse mit eigenem Panel, die Bilder holen und darstellen soll
public final class WebCamImagePanelEx extends JPanel implements ActionListener,
ComponentListener, IWebcamLoadingStatus,
xxxr.status.IWebcamLoadingStatusSubject
{
// Bild aus Datei einlesen
private boolean loadImage(String strImage)
{
boolean bErg = false;
... // Loggen o.ä.
BufferedImage myImage = null;
myImage = ImageIO.read(new File(strImage));
if (myImage != null)
{
setImage(myImage);
resizePicPanel();
bErg = true;
}
... // Loggen o.ä.
return bErg;
}
// Größe des Panel anpassen
public synchronized void resizePicPanel()
{
...
double x = 0;
bildHeight = pnPic.getHeight();
bildWidth = pnPic.getWidth();
if ((bildWidth == 0))
{
return;
}
x = ((double) bildWidth / (double) pic.getIconWidth());
if (x != oldX)
{
pic.setImage(picBuffer.getImage().getScaledInstance(
(int) (pic.getIconWidth() * x) - 1,
(int) (pic.getIconHeight() * x) - 1, Image.SCALE_FAST));
}
oldX = x;
int nDividerPos = 0;
if ((m_mainFrm != null) && (m_mainFrm.jSplitPaneImage != null))
{
nDividerPos = m_mainFrm.jSplitPaneImage.getDividerLocation();
...
}
}
}
// Hier sollen die entspr. Bilddatei geladen und nacheinander angezeigt werden
// Die Funktion liegt im Hauptprogramm der Anwendung ....
public void btnAbschluss_actionPerformed(ActionEvent e)
{
...
// dann die Bilder holen und anzeigen
// strBlocks = Stringarray, das die Bild-Dateinamen entält, die dann
// jew. nach 'strBild' geschrieben werden
for( int i = 0; i < strBlocks.length; i++ )
{
String strBild; // Pfad + Dateiname des zu ladenden Bildes
... // Holen der Daten, um den Ort 'strBild' zu ermitteln
boolean bIsLoad = pnImageWebcam.loadImage( strBild ); // s. o.
if( bIsLoad )
{
// ###################################################################
// mit diesen Funktionen soll das Bild im Panel dargestellt werden .....
// ###################################################################
pnImageWebcam.resizePicPanel(); // s. o.
pnImageWebcam.repaint(); // = java.awt.Component.repaint()
pnImageWeb.repaint(); // = java.awt.Component.repaint()
repaint(); // = java.awt.Component.repaint()
}
...
}
...
}
Bin leider ziemlich ratlos, wie ich dies hinbekommen soll?


Ich hoffe, dass meine Code-Auszüge zum Nachvollziehen des Problems ausreichen ...
Bin selbst mit meinem Latein (sprich: Java-Kenntnissen) ziemlich am Ende
Hat irgendwer hierzu eine Idee
Gibt es vielleicht sowas, wie eine Refresh-Funktion o.ä.?
Danke im voraus für Vorschläge!
LG aus OS
Klaus
Zuletzt bearbeitet: