Java, JFrame bilder zeitgesteuert nacheinander anzeigen ...

Düzsel

Mitglied
Hallo Java Gemeinde,
in Sachen java bin ich Anfänger und ich möchte wissen ob es eine Mehode gibt, wie ich aus einem Bilderordner bilder nach Hoch und Querformat sortieren kann und dann auf zwei unterschiedlichen JFrames anzeigen lassen kann.

Es sollen 2 Monitore Bedient werden einer steht links, hochkant und einer steht im Querformat. Quer= Querformatbilder und hoch = Hochformatbilder
Anzeigedauer jeweils 5 sekunden.

Habe da schon mal was vorbereitet:
Code:
package fullscreen;

import java.awt.Toolkit;
import java.awt.Dimension;
import java.awt.image.BufferedImage;
import java.io.File;
import java.awt.event.*;
import java.io.IOException;
import java.awt.event.MouseMotionListener;

import javax.swing.*;
//import javax.imageio.ImageIO;
//import javax.swing.JFrame;
//import javax.swing.JLabel;

 
public class fenster implements MouseMotionListener, KeyListener {
  JFrame frame;
    //Fenster 1
    public fenster() {
    frame = new JFrame("Test");
   

    Toolkit tk = Toolkit.getDefaultToolkit();
    int xSize = ((int) tk.getScreenSize().getWidth());
    int ySize = ((int) tk.getScreenSize().getHeight());
    
    //Content Pane 01
    frame.setUndecorated(true);  
    frame.setSize(xSize,ySize);
    frame.setVisible(true); //.show() seit 1.5 nicht mehr verwenden.
    //frame.set.alignLeft(true);
    frame.addMouseMotionListener(this);
    frame.addKeyListener(this);
    frame.getContentPane().addMouseMotionListener(this);
    
    //Fenster mit Schliess events, Taste und Maus.
    }
    public static void main(String[] args) throws IOException {
        fenster app = new fenster();
    }
    
    
    //Bilder laden
       //File inputFile = new File("C:Desktop/bilder/*.*");
        
                
    
    //Bildfenster wird geschlossen bei Maus oder Tastenevent
    @Override
    public void mouseDragged(MouseEvent arg0) {
	frame.dispose();
    }
    @Override
    public void mouseMoved(MouseEvent arg0) {
	frame.dispose();
    }
    @Override
    public void keyTyped(KeyEvent e) {
	frame.dispose();
    }
    @Override
    public void keyPressed(KeyEvent e) {
        frame.dispose();
    }
    @Override
    public void keyReleased(KeyEvent e) {
	frame.dispose();
    }
}

Das Fenster schliesst bei Mausbewegung oder Tastatureingabe, zeigt aber noch nichts und macht sonst auch noch nichts. Der Bilderordner liegt derzeit auf dem Dekstop und alle Bilder egal ob quer oder hoch, sollen in einen Ordner hinein.

Viele Grüße und vielen Dank

Viele grüße
 
Moin ^^

Also ob ein Bild imt Hochformat oder Querformat ist, sollte nicht schwer herauszufinden sein, denn die Maße des Bildes bekommt man ja durch das Bild. Wenn du zwe Monitore bedienen willst, dann wirst du zwei Frames dieser Art brauchen, wobei das jeweilige Frame dann wissen muss, ob es die Bilder hochkant oder quer darstellen soll. Dafür gibt es verschiedene Ansätze. Ich persönlich würde für jedes der Formate eine eigene Queue anlegen, aus der sich dann das jeweilige Frame die Bilder holt, wobei ich dann wohl schon 2 oder 3 Bilder als Puffer quasi vorladen würde, weil wenn man die Bilder immer nur on-the-fly laden würde, dann könnte es zu Verzögerungen in der Darstellung geben und so hat man noch einen gewissen Puffer, aber eben auch nicht zu viel, weil je nach Größer der Bilder könnte das auf den Speicher gehen.

Das zur Theorie. Woran happert es denn genau? Ich mein der Code macht im Moment noch nix anderes als eigentlich gar nix. Wenn man den MouseMotionListener entfernt, dann passiert was, aber mehr als eine über den gesamten Bildschirm verteilte graue Fläche sieht man nix, das hast du ja aber auch gesagt. Die Bilder fehlen eben. Hast du denn schon was versucht?

Achso, und Klasse fangen in Java mit einem Großbuchstaben an.
 
Moin ^^

Also ob ein Bild imt Hochformat oder Querformat ist, sollte nicht schwer herauszufinden sein, denn die Maße des Bildes bekommt man ja durch das Bild. Wenn du zwe Monitore bedienen willst, dann wirst du zwei Frames dieser Art brauchen, wobei das jeweilige Frame dann wissen muss, ob es die Bilder hochkant oder quer darstellen soll. Dafür gibt es verschiedene Ansätze. Ich persönlich würde für jedes der Formate eine eigene Queue anlegen, aus der sich dann das jeweilige Frame die Bilder holt, wobei ich dann wohl schon 2 oder 3 Bilder als Puffer quasi vorladen würde, weil wenn man die Bilder immer nur on-the-fly laden würde, dann könnte es zu Verzögerungen in der Darstellung geben und so hat man noch einen gewissen Puffer, aber eben auch nicht zu viel, weil je nach Größer der Bilder könnte das auf den Speicher gehen.

Das zur Theorie. Woran happert es denn genau? Ich mein der Code macht im Moment noch nix anderes als eigentlich gar nix. Wenn man den MouseMotionListener entfernt, dann passiert was, aber mehr als eine über den gesamten Bildschirm verteilte graue Fläche sieht man nix, das hast du ja aber auch gesagt. Die Bilder fehlen eben. Hast du denn schon was versucht?

Achso, und Klasse fangen in Java mit einem Großbuchstaben an.


Ja genau du hast Recht, aber ich weis nicht wie ich programmiertechnisch weiter machen soll -bin Anfänger in Java Dingen. Was kommt wo rein und so ...
ich weis halt nur das ein vergleich stattfinden muss ob die bilder X und Y sind so wie jeweils eine Variable für X und Y anzulegen wären damit man auf den vergleich mit if oder so kommen kann. Ähnlich dem "Wenn Y< X dann fenster Hochkant usw. Aber wie programmiere ich das?
Wie kriege ich die Bilder rein und den zeitablauf von 5sek? Fragen über fragen.
 
Ich hoffe, du erwartest jetzt keinen fertigen Code, denn dafür bist du hier leider falsch ;) Wir geben nur Tipps und helfen, die Arbeit wirst du schon selber machen müssen. Ich habe schon mitbekommen, dass du noch Anfänger bist, arbeitest aber bereits an einer GUI rum, die zudem den gesamten Bildschirm blockieren soll und eine Diashow drauf läuft. Um dem Ganzen noch einen drauf zu setzen, soll das nicht nur ein Bildschirm sein, den die Anwendung versorgt, sondern gleich zwei. Ich hoffe für dich, dass du wenigstens die Grundlagen halbwegs drauf hast, denn sonst wird das Projekt kein Zuckerschlecken und Spaß wirst du auch keinen dran haben ^^

Ein Bild laden kann man auf sehr unterschiedliche Weise. Man kann dafür die Klassen ImageIO, Toolkit oder meine bevorzugte Variante ImageIcon verwenden. Es gibt noch andere Wege, diese sind mir jetzt grad so durch den Kopf geschossen. Du wirst aber in jedem Fall mit der Klasse Image zu tun haben. Aus einem Image-Objekt kannst du die Breite und Höhe des Bildes holen und somit dann entscheiden, ob das Bild im Quer- oder Hochformat zu zeichnen ist.

Ein Bild zeichnen kann man auch auf mehrere Weisen. Schnell gemacht wäre die Möglichkeit mit einem JLabel, da man da direkt ein Icon übergeben kann (ImageIcon ist ein Icon, man kann aber über die Methode getImage() auch das Image-Objekt erhalten, also quasi 2 in 1). Ich persönlich zeichne das aber meist direkt als Hintergrund in ein JPanel. Dafür muss man die Methode paintComponent(Graphics) überschreiben (bei Swing, bei AWT wäre es paint(Graphics), du verwendest hier aber Swing). Mit dem Graphics-Objekt kann man alles zeichnen, was man will, man hat also die freie Wahl für das Geschehen.

Das mit den Intervallen ließe sich z.B. mit einem Timer erledigen. Da ich das hier nicht auch noch komplett erläutern will ein Verweis auf den Thread hier: klick

Multiscreen ist dann wieder ne andere Geschichte, erst einmal muss das auf einem Monitor laufen.
 
Ja das ist schon eine Hilfe, die Menge der Ordnerbilder kann ich doch mit "lentgh" auslesen. so wie ich das verstanden hatte. den vergleich über eine if abfrage ob die
Länge der Bildseite (X > als Y || X < Y) ist also noch die Frage offen, wie bekomme ich es hin, das ein Bild immer an der unteren Seite (abgetastet oder ausgemessen) wird weil es Hochkant und horizontal längere Bilder gibt. Oder sollte ich lieber eine Methode benutzen, um die Oberfläche abzutasten um das Seitenverhältniss zu klähren.
 
Du wirst da wohl oder übel die Maße deines Bildes mit denen der zur Verfügung stehenden Oberfläche, auf der das Bild dargestellt werden soll, vergleichen und eventuell nachkorrigieren müssen. Dabei musst du natürlich drauf achten, dass das Seitenverhältnis beibehalten wird.
 

Neue Beiträge

Zurück