Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere?
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere?
Equilibrio e potenza definiscono il Samsung Galaxy S26+, un flagship che sfida la variante Ultra e la fascia alta del mercato con il primo processore mobile a 2nm. Pur mantenendo l'hardware fotografico precedente, lo smartphone brilla per un display QHD+ da 6,7 pollici d'eccellenza, privo però del trattamento antiriflesso dell'Ultra, e per prestazioni molto elevate. Completano il quadro la ricarica wireless a 20W e, soprattutto, un supporto software settennale
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti
Zeekr sbarca ufficialmente in Italia con tre modelli elettrici premium, X, 7X e 001, distribuiti da Jameel Motors su una rete di 52 punti vendita già attivi. La Zeekr X parte da 39.900 euro, la 7X da 54.100: piattaforma a 800V, chip Snapdragon di ultima generazione, ricarica ultraveloce e un'autonomia dichiarata fino a 615 km WLTP. Le prime consegne sono previste a metà aprile
Marathon: arriva il Fortnite hardcore
Marathon: arriva il Fortnite hardcore
Marathon è il titolo multiplayer competitivo del momento. Ecco quali sono le caratteristiche di gioco principali, insieme alle nostre prime considerazioni dopo qualche "run" nell'extraction shooter di Bungie
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 21-02-2007, 16:53   #1
TuLKaS85
Senior Member
 
L'Avatar di TuLKaS85
 
Iscritto dal: Nov 2004
Città: Napoli
Messaggi: 999
[Java/Swing] casella di controllo

salve, devo realizzare una casella che in base allo stato di alcune variabili si comporti in un determinato modo....

esempio :
se variabile >20 casella verde
se 10< variabile <20 casella gialla
se variabile =0 casella rossa

ovviamente saprei realizzare la cosa in seguito ad un evento definito, ma le caselle si dovrebbero modificare automaticamente in base allo stato della variabile ... si può fare ??
__________________
Intel Pentium IV 3,0 GHz, Asus P5SD2-X , 1.0 Gb ddr2, Radeon X550 , Maxtor 160Gb sata, Hitachi 100 gb pata,Piooner Dvr-109 ,Microsoft Windows XP Professional Service Pack 2
TuLKaS85 è offline   Rispondi citando il messaggio o parte di esso
Old 23-02-2007, 18:50   #2
TuLKaS85
Senior Member
 
L'Avatar di TuLKaS85
 
Iscritto dal: Nov 2004
Città: Napoli
Messaggi: 999
__________________
Intel Pentium IV 3,0 GHz, Asus P5SD2-X , 1.0 Gb ddr2, Radeon X550 , Maxtor 160Gb sata, Hitachi 100 gb pata,Piooner Dvr-109 ,Microsoft Windows XP Professional Service Pack 2
TuLKaS85 è offline   Rispondi citando il messaggio o parte di esso
Old 23-02-2007, 19:07   #3
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
Quote:
Originariamente inviato da TuLKaS85 Guarda i messaggi
che intendi x casella?
tipo nel caso di una JTextField devi fare così:
Codice:
		JTextField field = new JTextField();
		JTextField field1 = new JTextField();
		field.setBackground(new Color(255,0,0,255));  //RED
		field1.setBackground(new Color(0,255,0,255)); //GREEN
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 23-02-2007, 23:57   #4
TuLKaS85
Senior Member
 
L'Avatar di TuLKaS85
 
Iscritto dal: Nov 2004
Città: Napoli
Messaggi: 999
Quote:
Originariamente inviato da ^TiGeRShArK^ Guarda i messaggi
che intendi x casella?
tipo nel caso di una JTextField devi fare così:
Codice:
		JTextField field = new JTextField();
		JTextField field1 = new JTextField();
		field.setBackground(new Color(255,0,0,255));  //RED
		field1.setBackground(new Color(0,255,0,255)); //GREEN
si una cosa del genere... a me bastava anche un quadratino con sfondo colorato...

il problema è colorare in seguito ad un determinato evento... ho letto che esistono gli itemEvent... sarà la risposta che cerco ??
__________________
Intel Pentium IV 3,0 GHz, Asus P5SD2-X , 1.0 Gb ddr2, Radeon X550 , Maxtor 160Gb sata, Hitachi 100 gb pata,Piooner Dvr-109 ,Microsoft Windows XP Professional Service Pack 2
TuLKaS85 è offline   Rispondi citando il messaggio o parte di esso
Old 24-02-2007, 12:45   #5
lovaz
Senior Member
 
L'Avatar di lovaz
 
Iscritto dal: Jul 2002
Messaggi: 4334
Se ti interessa solo il quadratino usa una JLabel,
per l'evento basta che setti il colore nel listener appropriato
lovaz è offline   Rispondi citando il messaggio o parte di esso
Old 24-02-2007, 15:20   #6
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
C'è un problema di divergenza tra la rappresentazione umana delle cose e la loro realtà fisica. I calcolatori ed i linguaggi di programmazione, per quanto pomposamente si tenti di negarlo, adottano un punto di vista fisico nella rappresentazione dello stato delle cose. I dati subiscono l'effetto di qualcosa.

Gli esseri umani adottano al contrario un'interpretazione personificante: i dati fanno qualcosa.

La casa crolla. In realtà la casa non fa un bel niente. Subisce l'effetto di una forza e tale forza altera l'integrità delle sue parti.

La casella cambia colore. In verità la casella non cambia un bel niente. C'è qualcosa che cambia il colore della casella.

La faccenda curiosa è che l'interpretazione attiva, personificante dei fenomeni è possibile ma complicata e inefficiente. E' il sintomo di due malattie: i linguaggi di programmazione non sono fatti perchè l'uomo esprima sè stesso e la legge di Moore è uno slogan valido solo se la questione sia "quanto fa 1 + 1".

La casella che cambia colore quando delle variabili mutino il loro valore è un esempio interessante della questione. L'approccio umano al fenomeno è espresso nella frase stessa. La casella osserva la variabile e quando nota un mutamento di valore cambia il proprio colore. L'approccio più direttamente rappresentabile attraverso un linguaggio di programmazione richiede invece una reinterpretazione passiva. Il colore della casella viene cambiato dalla variabile quando il valore di quest'ultima viene cambiato da qualcun'altro.

Una possibile traduzione in Java dell'interpretazione umana del fenomeno (la casella fa qualcosa quando nota che il valore della variabile cambia) è questa.

Codice:
/** Valore alterabile nominato */
public interface Variabile {

	/** Accesso al valore corrente di
	questa variabile */
	Object getValore();

	/** Impostazione di un nuovo valore per
	questa variabile */
	void setValore(Object nuovoValore);

	/** Accesso al nome della variabile */
	String getNome();

	/** Questione di accesso concorrente al
	valore di una variabile. */
	void bloccaAccesso();

	/** Questione di accesso concorrente al
	valore di una variabile. */
	void liberaAccesso();
}
Codice:
import java.util.concurrent.locks.*;

public class VariabileIntera implements Variabile {
	private final Lock SERRATURA_ACCESSO = new ReentrantLock();
	private volatile Integer valore = 0;
	private final String NOME;

	/** Crea una variabile intera con il nome in argomento. Il
	valore iniziale di questa variabile è 0 (zero). */
	public VariabileIntera(String nome) {
		NOME = nome;
	}

	/** Restituisce il nome di questa variabile. */
	public String getNome() {
		return NOME;
	}

	/** Imposta il valore di questa variabile. L'argomento deve essere
	un Integer diverso da null. */
	public void setValore(Object nuovoValore) {
		if(nuovoValore == null || !(nuovoValore instanceof Integer)) {
			throw new IllegalArgumentException("il valore deve essere un intero != da null");
		}
		bloccaAccesso();
		try {
			valore = (Integer)nuovoValore;
		} finally {
			liberaAccesso();
		}
	}

	/** Restituisce il valore di questa variabile. */
	public Object getValore() {
		return valore;
	}

	/** Blocca l'accesso alla scrittura del valore */
	public void bloccaAccesso() {
		SERRATURA_ACCESSO.lock();
	}

	/** Libera l'accesso alla scrittura del valore */
	public void liberaAccesso() {
		SERRATURA_ACCESSO.unlock();
	}
}
Codice:
import java.util.*;
import java.util.concurrent.locks.*;
import java.util.concurrent.*;
import javax.swing.*;
import java.awt.*;

public class Casella {
	private ConcurrentLinkedQueue<Variabile> variabiliOsservate =
		new ConcurrentLinkedQueue<Variabile>();
	private ConcurrentHashMap<Variabile, Object> mappaValoriPrecedenti =
		new ConcurrentHashMap<Variabile, Object>();
	private volatile Thread esecutore;
	private final JLabel COMPONENTE;

	/** Un oggetto che cambia colore quando cambia il valore delle
	variabili che osserva. */
	public Casella() {
		COMPONENTE = new JLabel();
		COMPONENTE.setOpaque(true);
		COMPONENTE.setBorder(BorderFactory.createLineBorder(Color.BLACK));s
		Dimension size = new Dimension(24, 24);
		COMPONENTE.setPreferredSize(size);
		COMPONENTE.setMinimumSize(size);
		COMPONENTE.setPreferredSize(size);
		esecutore = new Thread(osservazione);
		esecutore.setDaemon(true);
		esecutore.start();
	}

	/** Restituisce il componente Swing che rappresenta
	graficamente questa Casella */
	public JComponent getComponente() {
		return COMPONENTE;
	}

	/** Aggiunge alla casella una variabile da osservare. */
	public void aggiungiVariabileDaOsservare(Variabile v) {
		mappaValoriPrecedenti.put(v, v.getValore());
		variabiliOsservate.add(v);
	}

	/** Sottrae alla casella una delle variabile che osserva */
	public void rimuoviVariabileOsservata(Variabile v) {
		mappaValoriPrecedenti.remove(v);
		variabiliOsservate.remove(v);
	}

	/** Questioni tecniche */
	public void libera() {
		final Thread cache = esecutore;
		if(cache != null) {
			cache.interrupt();
		}
	}

	/** Questioni tecniche */
	private Runnable osservazione = new Runnable() {
		public void run() {
			try {
				while(true) {
					rilevaMutazioniDiValore();
				}
			} catch(InterruptedException ex) {
				System.out.println("Osservazione interrotta");
			}
		}
	};

	/** La casella cerca di capire se il valore di una delle variabili
	che osserva sia cambiato */
	private void rilevaMutazioniDiValore() throws InterruptedException {
		for(Variabile variabile : variabiliOsservate) {
			try {
				variabile.bloccaAccesso();
				Object vecchioValore = mappaValoriPrecedenti.get(variabile);
				Object valoreCorrente = variabile.getValore();
				if(valoreCorrente.equals(vecchioValore) == false) {
					mappaValoriPrecedenti.put(variabile, valoreCorrente);
					aggiornaStato(variabile);
				}
			} finally {
				variabile.liberaAccesso();
			}
		}
		Thread.sleep(10);
	}

	/** Cambia il colore della casella in base al valore della
	variabile */
	private void aggiornaStato(Variabile v) {
		Object valore = v.getValore();
		if(valore != null && valore instanceof Integer) {
			Integer numero = (Integer)valore;
			if(numero > 20) {
				impostaColore(Color.GREEN);
			} else if(numero > 10) {
				impostaColore(Color.YELLOW);
			} else if(numero == 0) {
				impostaColore(Color.RED);
			}
		}
	}

	/** Questioni tecniche */
	private void impostaColore(final Color COLORE) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				COMPONENTE.setBackground(COLORE);
			}
		});
	}
}
Per mettere insieme la faccenda potremmo usare questo Main

Codice:
import javax.swing.*;
import java.awt.*;
import java.util.*;

public class Main implements Runnable {
	public static void main(String[] args) {
		Main main = new Main();
		SwingUtilities.invokeLater(main);
		main.avviaScanner();
	}

	private final Variabile PESO = new VariabileIntera("peso");

	public void run() {
		Casella casella = new Casella();
		casella.aggiungiVariabileDaOsservare(PESO);
		JFrame frame = new JFrame("Esempio");
		frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		frame.setLayout(new FlowLayout());
		frame.add(casella.getComponente());
		frame.pack();
		frame.setVisible(true);
	}

	private void avviaScanner() {
		try {
			System.out.println("inserire un valore intero per la variabile");
			Scanner scanner = new Scanner(System.in);
			while(scanner.hasNextLine()) {
				String line = scanner.nextLine();
				if(line.equals("quit")) {
					System.exit(0); //BRUTALONE!
				} else {
					Integer value = parseInteger(line);
					if(value != null) {
						PESO.setValore(value);
					}
				}
			}
		} catch(Exception ex) {
			return;
		}
	}

	private Integer parseInteger(String line) {
		try {
			return Integer.parseInt(line);
		} catch(NumberFormatException ex) {
			return null;
		}
	}
}
Casella è un agente autonomo. Tutto quel che serve perchè esegua il suo compito è che gli sia fornita una variabile da osservare:

Casella casella = new Casella();
casella.aggiungiVariabileDaOsservare(unaVariabile);

Il resto accade perchè Casella "fa" qualcosa.

Occhio invece all'interpretazione non umana. Io dico che la casella cambia colore ma scrivo un'altra cosa: scrivo che la variabile fa cambiare il colore della casella.

Codice:
public interface Variabile {
	void aggiungiOsservatore(OsservatoreVariabile o);

	void rimuoviOsservatore(OsservatoreVariabile o);

	String getNome();

	Object getValore();

	void setValore(Object nuovoValore);
}
Codice:
public interface OsservatoreVariabile {

	void osservaMutazioneValoreVariabile(
		Variabile variabile,
		Object vecchioValore,
		Object nuovoValore);
}
Codice:
import java.awt.*;
import javax.swing.*;
import java.util.*;

public class Casella implements OsservatoreVariabile {
	private JLabel componente = new JLabel();

	public Casella() {
		componente.setOpaque(true);
		componente.setBorder(BorderFactory.createLineBorder(Color.BLACK));
		Dimension size = new Dimension(24, 24);
		componente.setMinimumSize(size);
		componente.setPreferredSize(size);
		componente.setPreferredSize(size);
	}

	public JComponent getComponente() {
		return componente;
	}

	public void osservaMutazioneValoreVariabile(
		Variabile variabile,
		Object vecchioValore,
		Object nuovoValore)
	{
		if(nuovoValore != null && nuovoValore instanceof Integer) {
			Integer intero = (Integer)nuovoValore;
			if(intero > 20) {
				componente.setBackground(Color.GREEN);
			} else if(intero > 10) {
				componente.setBackground(Color.YELLOW);
			} else if(intero == 0) {
				componente.setBackground(Color.RED);
			}
		}
	}
}
Codice:
import java.util.*;

public class VariabileIntera implements Variabile {
	private List<OsservatoreVariabile> osservatori =
		Collections.synchronizedList(
		new LinkedList<OsservatoreVariabile>());
	private final String NOME;
	private Integer valore = 0;

	public VariabileIntera(String nomeVariabile) {
		NOME = nomeVariabile;
	}

	public String getNome() {
		return NOME;
	}

	public void aggiungiOsservatore(OsservatoreVariabile o) {
		osservatori.add(o);
	}

	public void rimuoviOsservatore(OsservatoreVariabile o) {
		osservatori.remove(o);
	}

	public void setValore(Object nuovoValore) {
		if(nuovoValore != null && nuovoValore instanceof Integer) {
			Integer vecchioValore = valore;
			valore = (Integer)nuovoValore;
			notificaMutazioneValore(vecchioValore, valore);
		} else {
			throw new IllegalArgumentException("Integer required");
		}
	}

	public Integer getValore() {
		return valore;
	}

	private void notificaMutazioneValore(
		Integer vecchioValore, Integer nuovoValore)
	{
		ArrayList<OsservatoreVariabile> listaOsservatori =
			new ArrayList<OsservatoreVariabile>(osservatori);
		for(OsservatoreVariabile v : listaOsservatori) {
			v.osservaMutazioneValoreVariabile(
				this, vecchioValore, nuovoValore);
		}
	}
}
Codice:
import javax.swing.*;
import java.awt.*;
import java.util.*;

public class Main implements Runnable {
	public static void main(String[] args) {
		Main main = new Main();
		SwingUtilities.invokeLater(main);
		main.avviaScanner();
	}

	private final Variabile PESO = new VariabileIntera("peso");

	public void run() {
		Casella casella = new Casella();
		PESO.aggiungiOsservatore(casella);
		JFrame frame = new JFrame("Esempio");
		frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		frame.setLayout(new FlowLayout());
		frame.add(casella.getComponente());
		frame.pack();
		frame.setVisible(true);
	}

	private void avviaScanner() {
		try {
			System.out.println("inserire un valore intero per la variabile");
			Scanner scanner = new Scanner(System.in);
			while(scanner.hasNextLine()) {
				String line = scanner.nextLine();
				if(line.equals("quit")) {
					System.exit(0); //BRUTALONE!
				} else {
					Integer value = parseInteger(line);
					if(value != null) {
						PESO.setValore(value);
					}
				}
			}
		} catch(Exception ex) {
			return;
		}
	}

	private Integer parseInteger(String line) {
		try {
			return Integer.parseInt(line);
		} catch(NumberFormatException ex) {
			return null;
		}
	}
}
Funziona in entrambi i casi ma la seconda rappresentazione è migliore per il calcolatore e richiede meno strumenti Java.

L'unico problema è che la prima versione è quella che voglio io, la seconda è quella che vogliono Java e il calcolatore.

Che andrebbe anche bene se non fosse per una quisquilia: non è il calcolatore che ha inventato l'uomo ma l'uomo il calcolatore.

A scanso di equivoci, non è una mia personale paranoia. Era, anzi, una questione centrale nella teoria della programmazione orientata agli aspetti, prima che arrivassero i teorici dei tipi e la facessero diventare una cosa incomprensibile .
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!

Ultima modifica di PGI-Bis : 24-02-2007 alle 15:22. Motivo: Bon ton grammatico
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 25-02-2007, 08:17   #7
TuLKaS85
Senior Member
 
L'Avatar di TuLKaS85
 
Iscritto dal: Nov 2004
Città: Napoli
Messaggi: 999
vi ringrazio...

in effetti è quello che dicevo io, la casella cambia colore in funzione di una variabile, mi trovo completamente daccordo...
__________________
Intel Pentium IV 3,0 GHz, Asus P5SD2-X , 1.0 Gb ddr2, Radeon X550 , Maxtor 160Gb sata, Hitachi 100 gb pata,Piooner Dvr-109 ,Microsoft Windows XP Professional Service Pack 2
TuLKaS85 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere? Recensione Samsung Galaxy S26+: sfida l'Ultra, m...
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti Zeekr X e 7X provate: prezzi, autonomia fino a 6...
Marathon: arriva il Fortnite hardcore Marathon: arriva il Fortnite hardcore
HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare HP Imagine 2026: abbiamo visto HP IQ all’opera, ...
PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è PNY RTX 5080 Slim OC, sembra una Founders Editio...
Panasonic LUMIX TZ300: la nuova compatta...
La società aerospaziale italiana ...
Il Politecnico di Milano guiderà ...
Amazon Leo punta ad aumentare la cadenza...
Pro Type Ergo: Razer si lancia a gamba t...
Artemis II: dal guasto risolto alla toil...
Le immagini e i video più spettac...
Previsioni drastiche di TrendForce: la D...
La PS6 portatile sarà più potente della ...
Toshiba annuncia i primi dischi FC-MAMR ...
Amazon Leo offrirà l'accesso a Internet ...
Alienware presenta i nuovi desktop Area-...
Fiat 600 benzina senza ibrido: 101 CV, c...
DJI Mini 4K Combo a 269€ o DJI Neo da 14...
Addio agli sprechi nel riciclo: il Fraun...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 20:32.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v