Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Più Timer in applicazione per visualizzare immagini

    Ciao ragazzi ho una domanda da porvi..Sto impazzendo da 2 giorni con un'applicazione che riceve dall'utente (tramite form) dei valori e li usa per definire il tempo di visualizzazione di una o piu immagini e la schermata nera tra queste...

    E' possibile definire più timer?Per esempio se in input ho che
    -devo visualizzare una immagine per x secondi
    -poi visualizzare y secondi di schermo nero
    -e ancora una immagine per x secondi

    come posso fare?
    Avevo una mezza idea di definire all'interno dell'actionPerformed un altro timer per lo schermo nero ma non me lo fa fare.
    avete idee?la doc di java non mi dice nulla.
    grazie in anticipo per la risposta

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    Mi ricordo della Demo che ti avevo fatto e faccio che riprendere quella.
    Basta che crei 2 timer impostando setRepeats(false) di modo che non si ripetano e gli assegni lo stessa actionPerformed.
    All'interno di actionPerformed fai ripartire o uno o l'altro timer. Per sapere quale timer re-impostare ho utilizzato setActionCommand.
    Puoi cambiare a tuo piacimento i tempi agendo su quel 4000 (4 secondi di visualizzazione immagini) e 1000 (1 secondo di black screen).
    Nota che ora la variabile booleana blackScreen non serve neanche più.
    Ciao.

    codice:
    import java.awt.Color;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JFrame;
    import javax.swing.ImageIcon;
    import javax.swing.Timer;
    import javax.swing.JLabel;
    import java.awt.Toolkit;
    import java.awt.Dimension;
    
    class Demo extends JFrame implements ActionListener {
        private Timer timer1, timer2;
        private JLabel label, label2;
        private int imageIndex = 0;
        private String s = "C://Documents and Settings//utente//workspace//Progect//src//album//";
        private ImageIcon images[][] = {
            { new ImageIcon(s + "1.jpg"), new ImageIcon(s + "2.jpg") },
            { new ImageIcon(s + "3.jpg"), new ImageIcon(s + "4.jpg") },
            { new ImageIcon(s + "5.jpg"), new ImageIcon(s + "6.jpg") },
            { new ImageIcon(s + "7.jpg"), new ImageIcon(s + "8.jpg") }
            // qui puoi continuare ad aggiungere altre coppie di icone
        };	
    
        public Demo() {
            label = new JLabel(images[imageIndex][0]);
            label2 = new JLabel(images[imageIndex][1]);
            label.setBounds(150, 150, 100, 100);
            label2.setBounds(350, 150, 100, 100);        
            add(label);
            add(label2);
            getContentPane().setBackground(Color.BLACK);
            setLayout(null);
            //setSize(600, 400);
            // fullscreen
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        		
            setUndecorated(true);
            Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
            setBounds(0, 0, screenSize.width, screenSize.height);		
            // creo timer1, timer2
            timer1 = new Timer(4000, this);
            timer1.setRepeats(false);
            timer1.setActionCommand("blackScreen");
            timer2 = new Timer(1000, this);
            timer2.setRepeats(false);
            timer2.setActionCommand("image");
            timer1.start();
        }
        
        public void actionPerformed(ActionEvent e) {
            if (e.getActionCommand().equals("blackScreen")) {
                label.setIcon(null);
                label2.setIcon(null);
                timer2.start();
            } else {
                imageIndex = imageIndex + 1 >= images.length ? 0 : imageIndex + 1;
                label.setIcon(images[imageIndex][0]);
                label2.setIcon(images[imageIndex][1]);
                timer1.start();
            }
        }    
    
        public static void main(String args[]) {
            new Demo().setVisible(true);
        }
    }

  3. #3
    c0dex come al solito sei di grande aiuto..purtroppo si tratta di un'applicazione un pò diersa dalla precedente in cui ho piu variabile e non è detto che devo visualizzare solo due immagini alla volta.L'utente inserisce 5 valori cioè num immagini,secondi display singola immagine,secondi di nero tra immagini consecutive,secondi di nero prima di visualizzare le n immagini in contemporanea,secondi di dsplay delle immagini in contemporanea tra cui l'utente deve scegliere..i timer quindi sarebbero 4 praticamente ed è un casino...ora provo a farti vedere il codice magari mi dai qualche suggerimento..

  4. #4
    codice:
    public class Screen extends JFrame implements ActionListener { private int timeOfImage; private int timeOfChoice; private int numOfImages; private int timeBetwImage; private int timeBeforeChoice; private JPanel contentPane; private final int MILLE = 1000; private JLabel label; public int index; private javax.swing.Timer timerDisplay; private Timer timerBetweenImages; private boolean blackscreen; private Timer timerBetwImage; private boolean thereAreImages; private int i; public ImageIcon[] image = new ImageIcon [8]; private Timer timer2; { image[0] = new ImageIcon(getClass().getResource("/Copia di album/1.jpg")); image[1] = new ImageIcon(getClass().getResource("/Copia di album/2.jpg")); image[2] = new ImageIcon(getClass().getResource("/Copia di album/3.jpg")); image[3] = new ImageIcon(getClass().getResource("/Copia di album/4.jpg")); image[4] = new ImageIcon(getClass().getResource("/Copia di album/5.jpg")); image[5] = new ImageIcon(getClass().getResource("/Copia di album/6.jpg")); image[6] = new ImageIcon(getClass().getResource("/Copia di album/7.jpg")); image[7] = new ImageIcon(getClass().getResource("/Copia di album/8.jpg")); } public Screen(int timeOfImage, int timeOfChoice, int numOfImages, int timeBeforeChoice, int timeBetwImage) { // variabili inserite in un form dall'utente this.timeOfImage = timeOfImage; this.timeOfChoice = timeOfChoice; this.numOfImages = numOfImages; this.timeBeforeChoice = timeBeforeChoice; this.timeBetwImage = timeBetwImage; setUndecorated(true); setBackground(Color.BLACK); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); contentPane = new JPanel(); contentPane.setBackground(Color.BLACK); setContentPane(contentPane); contentPane.setLayout(new GridLayout(1, 1)); JLabel lblNewLabel_1 = new JLabel("N"); lblNewLabel_1.setHorizontalAlignment(SwingConstants.CENTER); getContentPane().setBackground(Color.BLACK); // fullscreen Dimension screenSize1 = Toolkit.getDefaultToolkit().getScreenSize(); setBounds(0, 0, screenSize1.width, screenSize1.height); //posiziono label al centro per visualizzare singola immagine e lo aggiungo label = new JLabel("n",SwingConstants.CENTER); contentPane.add(label); JPanel panel = new JPanel(); Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); setBounds(0, 0, screenSize.width, screenSize.height); //creo timer per il tempo di visualizzazione di ogni singola immagine timerDisplay = new Timer(timeOfImage*MILLE, this); timerDisplay.start(); } @Override public void actionPerformed(ActionEvent e) { // per visualizzare le singole immagini if(index < numOfImages) { label.setIcon(image[index]); index++; } else { contentPane.remove(label); validate(); //modifico il layout per inserire tanti pannelli quanto sono le immagini contentPane.setLayout(new GridLayout(1, numOfImages)); //creo tanti pannelli quante sono le immagini da visualizzare for(int i = 0; i < numOfImages; i++) { //creo pannello JPanel panel1 = new JPanel(); panel1.setBackground(Color.BLACK); panel1.setLayout(new GridLayout(2,1)); //aggiungo immagine e checkbox al pannello JLabel lblNewLabel_1 = new JLabel(""); lblNewLabel_1.setBackground(Color.BLACK); lblNewLabel_1.setHorizontalAlignment(SwingConstants.CENTER); lblNewLabel_1.setIcon(image[i]); panel1.add(lblNewLabel_1); JCheckBox chckbxNewCheckBox = new JCheckBox(""); chckbxNewCheckBox.setBackground(Color.BLACK); chckbxNewCheckBox.setHorizontalAlignment(SwingConstants.CENTER); chckbxNewCheckBox.setMaximumSize(new Dimension(82, 13)); panel1.add(chckbxNewCheckBox); //aggiungo pannello al contentPane contentPane.add(panel1); } //il ciclo si ripete all'infinito..perché?Ho provato ad inserire //timerDisplay.stop(); //ma non esegue il ciclo } }}

    Fino ad ora tutto ok per la visualizzazione ma vorrei aggiungere i tempi di schermata nera e quello in cui vengono visualizzate le immagini contemporaneamente...non esiste una cosa come
    timer.stop(num secondi in cui fermarsi)?

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    Originariamente inviato da informatica9000
    L'utente inserisce 5 valori cioè num immagini,secondi display singola immagine,secondi di nero tra immagini consecutive,secondi di nero prima di visualizzare le n immagini in contemporanea,secondi di dsplay delle immagini in contemporanea tra cui l'utente deve scegliere..i timer quindi sarebbero 4 praticamente ed è un casino...
    Non è molto chiaro come hai descritto i timer:
    1) secondi display singola immagine: questo si capisce, spero tu voglia dire che è ugualie per tutte le immagini... è così?
    2) secondi di nero tra immagini consecutive: questo anche si capisce, spero anche qui che sia sempre lo stesso
    3) secondi di nero prima di visualizzare le n immagini in contemporanea: questo non ho capito cosa vuol dire
    4) secondi di dsplay delle immagini in contemporanea tra cui l'utente deve scegliere: questo neanche
    Sostanzialmente non si capisce se si vedono singole immagini o coppie di immagini.

    Detto ciò, un problema del genere si risolve scrivendo prima sulla carta come risolveresti il problema e poi implementandolo. Non puoi partire a scrivere il programma se non hai fatto prima un po' di progettazione. Cioé puoi, ma vai avanti a tentativi e di solito viene fuori un programma inutilmente complicato.

    Il problema è anche che nella progettazione ti aiuterebbe sapere cosa può fare java, e qui purtroppo mi sembra che ti manchino tante conoscenze. Il volerle imparare facendo il programma ti rende la cosa estremamente difficile. Dovresti fare dei programmini a parte in cui ti togli tutti i dubbi sui timer, i jpanel e compagnia e solo DOPO riprogettare il programma.

    Infine aggiungo, io non so bene cosa rappresenti questo programma. Se è l'unico programma che devi fare nella tua vita fattelo fare da qualcuno. Se invece stai studiando, come detto prima, non è il modo di imparare IMHO.

  6. #6
    c0dex io ti ringrazio per i suggerimenti.Ovviamente se scrivo sul forum è perchè necessito di aiuto. Sono vicino alla soluzione ma sono da giorni su questa cosa..E' tutto chiaroannel,jframe ma la questione dei timer è per me difficile da capire. infatti nel mio programma mancano quelli. In ogni caso è chiarissimo e verissimo quello che dici.

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    Fai così: tutti i tentativi falli in un nuovo programma in cui usi solo i timer senza usare la grafica, e metti solo delle System.out.println dove stampi quello che dovresti fare. Quando, una volta eseguito, ti dà l'output che vorresti importi il tutto nel tuo programma con la GUI.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.