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

    problemino label su thread

    ciao sono nuovo sia del forum che di java
    sfogliando in giro non riesco a risolvere il mio problema:
    ho un applicazione nella quale voglio far lampeggiare una label, quindi ho pensato di fare un thread che si occupa solo di quello ed ecco il codice che usavo

    codice:
    class Lampeggio extends Menuconfont implements Runnable 
    {
        	public void run()
     	{	
                     while (true)
    	         {
                 		risultato.setVisible(false);
     			try 
                            {
    			       	 Thread.sleep(1000);
    			}catch(InterruptedException x){} 
    		 	risultato.setVisible(true);
     			try
                            {
                                     Thread.sleep(1000);
    			 } catch(InterruptedException x){}
     		}
     	}
    }
    public static void main(String[] arg)
    	{
    		Lampeggio r = (new Menuconfont()).new Lampeggio();
    		Thread t = new Thread(r);
    		t.start();
    		new Menuconfont();    
            }
    ps: è il tutto all'interno della classe: Menuconfont

    pero non mi lampeggia ancora :/ qualche suggerimento?? anche correzione del codice asd

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: problemino label su thread

    Originariamente inviato da soulmc888
    anche correzione del codice
    Innanzitutto la regola principale: salvo casi particolari (e ben documentati), l'accesso alla interfaccia utente va fatto solo nel contesto del EDT (event dispatch thread) ... non di un qualunque altro thread.
    Quindi quei setVisible() sono fatti nel contesto sbagliato.

    Poi comunque non è chiaro ... (anche perché non hai postato tutto....) ma perché istanzi 2 volte Menuconfont con new Menuconfont()???

    E comunque, se vuoi fare una temporizzazione in modo semplice, usa un javax.swing.Timer.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    ecco tutto il codice
    codice:
    import java.awt.*;
    import java.awt.event.*;
    import java.applet.*;
    
    public class menuconfont extends Frame
    {	
    	//Thread dedicato al comportamento della scritta
    	Thread lamp=new Thread("Lampeggiante");
    	//Definisco oggetti di tipo MenuItem
    	MenuItem esci=new MenuItem("Esci");
    	MenuItem verdana=new MenuItem("Verdana");
    	MenuItem timesnewroman=new MenuItem("Times New Roman");
    	MenuItem arial=new MenuItem("Arial");
    	MenuItem comicsans=new MenuItem("Comic Sans MS");
    	MenuItem lucida=new MenuItem("Lucida Console");
    	MenuItem dim10=new MenuItem("10");
    	MenuItem dim12=new MenuItem("12");
    	MenuItem dim14=new MenuItem("14");
    	MenuItem dim18=new MenuItem("18");
    	MenuItem dim20=new MenuItem("20");	
    	MenuItem rosso=new MenuItem("Rosso");
    	MenuItem verde=new MenuItem("Verde");
    	MenuItem blu=new MenuItem("Blu");
    	MenuItem giallo=new MenuItem("Giallo");
    	MenuItem nero=new MenuItem("Nero");
    	//Definisco oggetti di tipo Menu
    	Menu menu=new Menu("Menu");
    	Menu font= new Menu("Font");
    	Menu dim= new Menu("Dimensione");
    	Menu colore= new Menu("Colore");
    	//Definisco oggetti per l'interfaccia grafica di partenza
    	MenuBar barra = new MenuBar();
    	Font current=new Font("Verdana",Font.PLAIN,12);
    	Label risultato=new Label("Nessuna voce di menu cliccata");
    	
    //Aggiungo MenuBar e i Menu al Frame nel Costruttore
     public menuconfont()
     {	
      setupEventi();
      menu.add(esci);
      font.add(verdana);
    	font.add(timesnewroman);
    	font.add(arial);
    	font.add(comicsans);
    	font.add(lucida);	
      dim.add(dim10);
    	dim.add(dim12);
    	dim.add(dim14);	
    	dim.add(dim18);
    	dim.add(dim20);
      colore.add(rosso);
    	colore.add(verde);
    	colore.add(blu);
    	colore.add(giallo);
    	colore.add(nero);
      barra.add(menu);
    	barra.add(font);
    	barra.add(dim);
    	barra.add(colore);
      setMenuBar(barra);
      add(risultato);
      show();
    }
    //Associo ascoltatori a menu
    void setupEventi()
    {
    //Imposto dimensioni e titolo della finestra
    	setSize(230,200);
    	setTitle("Font e Colori");
    //Assegno gli ascotatori ai menu rispettivi	
    	verdana.addActionListener(new AscoltatoreFont());
    	timesnewroman.addActionListener(new AscoltatoreFont());
    	arial.addActionListener(new AscoltatoreFont());
    	comicsans.addActionListener(new AscoltatoreFont());
    	lucida.addActionListener(new AscoltatoreFont());
    	dim10.addActionListener(new AscoltatoreSize());
    	dim12.addActionListener(new AscoltatoreSize());
    	dim14.addActionListener(new AscoltatoreSize());
    	dim18.addActionListener(new AscoltatoreSize());
    	dim20.addActionListener(new AscoltatoreSize());
    	rosso.addActionListener(new AscoltatoreColor());
    	verde.addActionListener(new AscoltatoreColor());
    	blu.addActionListener(new AscoltatoreColor());
    	giallo.addActionListener(new AscoltatoreColor());
    	nero.addActionListener(new AscoltatoreColor());
    	esci.addActionListener(new AscoltatoreMenu());
    }
    
    class Lampeggio extends menuconfont implements Runnable
    {   
    	public void run()
    	{
    		while (true)
    		{
        		risultato.setVisible(false);
    			try {				      
    			      Thread.sleep(1000);				      
    			    }
    			catch(InterruptedException x){}
    			
    			risultato.setVisible(true);
    			try {				      
    			      Thread.sleep(1000);				      
    			    }
    			catch(InterruptedException x){}
    		}
    	}
    }
    public static void main(String[] arg)
    	{
    		Lampeggio r = (new menuconfont()).new Lampeggio();
    		Thread t = new Thread(r);
    		t.start();
    		new menuconfont();    	
    	}
    /*
     * IMPLEMETAZIONE ASCOLTATORI MENU
     */
    //Ascoltatore Famiglia Font
    class AscoltatoreFont implements ActionListener
    {
     public void actionPerformed (ActionEvent e)
     {	
    	current=new Font(e.getActionCommand(),Font.PLAIN,current.getSize());
    	risultato.setFont(current);
    	risultato.setText("Cliccato "+e.getActionCommand());	
     }
    }
    //Ascoltatore Dimensione Font
     class AscoltatoreSize implements ActionListener
     {
      public void actionPerformed (ActionEvent e)
      {	
     	current=new Font(current.getFontName(),Font.PLAIN,Integer.parseInt(e.getActionCommand()));
     	risultato.setFont(current);
     	risultato.setText(" Cliccato "+e.getActionCommand());
     	risultato.setVisible(true);
      }
    }
    //Ascoltatore Colore Font
     class AscoltatoreColor implements ActionListener
     {
      public void actionPerformed (ActionEvent e)
      {   
     	risultato.setText(" Cliccato "+e.getActionCommand());
      }
    }
    //Ascoltatore Menu Uscita
    class AscoltatoreMenu implements ActionListener
    {
      public void actionPerformed (ActionEvent e)
      { 	
     	System.exit(0);
      }
    }
    }

    c'è qualche modo migliore per far lampeggiare la label?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Beh, stai usando solo AWT (conosci Swing?) e oltretutto roba "deprecata" come il show() che non si dovrebbe più usare. Hai importato java.applet.* che non ti serve visto che non stai facendo una applet. E hai istanziato un sacco di oggetti dei listener, quando basterebbe 1 solo oggetto per ognuno dei listener.

    Comunque ecco un banalissimo esempio di lampeggio di JLabel in Swing.

    codice:
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    public class TestFrame extends JFrame {
        private JLabel label;
    
        public TestFrame() {
            super("Test");
    
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setSize(200, 200);
    
            label = new JLabel("Lampeggiante");
            label.setHorizontalAlignment(SwingConstants.CENTER);
    
            getContentPane().add(label, BorderLayout.CENTER);
    
            Timer t = new Timer(500, new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    label.setVisible(!label.isVisible());
                }
            });
    
            t.start();
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    new TestFrame().setVisible(true);
                }
            });
        }
    }
    Con poche righe ho gestito il tutto.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    ok grazie mille vedo come adattarlo al mio codice

  6. #6
    funziona grazie mille

  7. #7
    altra domandina....nella JLabel posso scrivere in colorato scegliendo il colore dalla barra dei menu senza ricorrere a un compare?

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da soulmc888
    altra domandina....nella JLabel posso scrivere in colorato scegliendo il colore dalla barra dei menu senza ricorrere a un compare?
    setForeground() chiaramente riceve un Color. Visto che nei menù hai solo dei Strng con un qualche nome es. "rosso", hai diverse strade:

    a) Solita catena di test, es. se "rosso" usa Color.RED, se blabla.....

    b) Usare una Map, chiave String (nome), valore Color (colore). Precarichi una Map (es. HashMap) e poi usi semplicemente get(nome) per avere il Color (cast necessario se non usi i "generics").

    c) Sfruttare la OOP, ovvero estendere il componente della voce di menu, es. JMenuItem per fare un ColoreMenuItem che contiene una proprietà per il Color. Nel listener tu saprai che la sorgente è un ColoreMenuItem ... cast a questo tipo e uso della tua proprietà es. getColore().
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    mh credo userò il primo....gli altri per ora me li devo vedere bene...grazie ancora

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.