Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Redmi Pad 2 9.7: ampio display, economico e peso contenuto, ma qualche limite nelle prestazioni
Redmi Pad 2 9.7: ampio display, economico e peso contenuto, ma qualche limite nelle prestazioni
Redmi Pad 2 9.7 punta su un display ampio e fluido, una batteria capace di accompagnare l'uso quotidiano senza ansie da ricarica e un prezzo accessibile, a partire da 179,90 euro per la versione con 64 GB di storage. Lo Snapdragon 6s 4G Gen 2 e i 4 GB di RAM della configurazione più diffusa frenano però chi cerca reattività e multitasking spinto: ecco il bilancio dopo due settimane di prova diretta
Peugeot Polygon Concept: ecco il futuro delle utilitarie
Peugeot Polygon Concept: ecco il futuro delle utilitarie
Polygon è la concept car di Peugeot che mostra il futuro delle soluzioni del segmento B: tra design compatti e innovativi affiancati da dimensioni compatte uno scherzo dalla manovrabilità incredibile per le manovre a bassa velocità
Reno16 Pro: il compatto di OPPO punta su fotocamera da 200MP e il nuovo Bubble! La recensione
Reno16 Pro: il compatto di OPPO punta su fotocamera da 200MP e il nuovo Bubble! La recensione
OPPO ha portato in Italia, dal 1° luglio 2026, Reno16 Pro: display AMOLED da 6,32 pollici a 144Hz, tripla fotocamera con sensore principale da 200 megapixel, chip Dimensity 8550 Super e batteria da 6000mAh, al prezzo di lancio di 899 euro. Lo abbiamo provato per due settimane insieme al nuovo accessorio Bubble, per capire se la formula compatta della serie regge ancora di fronte a un listino da 1099 euro
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


Redmi Pad 2 9.7: ampio display, economico e peso contenuto, ma qualche limite nelle prestazioni Redmi Pad 2 9.7: ampio display, economico e peso...
Peugeot Polygon Concept: ecco il futuro delle utilitarie Peugeot Polygon Concept: ecco il futuro delle ut...
Reno16 Pro: il compatto di OPPO punta su fotocamera da 200MP e il nuovo Bubble! La recensione Reno16 Pro: il compatto di OPPO punta su fotocam...
 Hisense 55U7SE: tuttofare e accessibile, il MiniLED per film, sport e gioco Hisense 55U7SE: tuttofare e accessibile, il Min...
Kindle Scribe Colorsoft: riduce le cornici e diventa a colori, ma il prezzo è alto Kindle Scribe Colorsoft: riduce le cornici e div...
Intel brevetta XBM: la nuova memoria pun...
Film prodotti con l'IA: Disney, insieme ...
Reinstallare Windows senza chiavette o s...
Apple racconta il suo vantaggio nell'AI ...
Cisco Cloud Control, una cabina di regia...
Il software che controlla le Fab va in p...
Il settore tech è il primo bersag...
Windows 11, corretto un bug che poteva o...
X introduce nuove funzioni per i video c...
Blue Origin sta costruendo diversi lande...
DeepSeek avvia lo sviluppo di un chip pr...
Le offerte migliori ora su Amazon sugli ...
Fino a un petabit al secondo! Il piano d...
Cisco punta tutto sull'IA: tutti i 90.00...
Intel Nova Lake riporterà il supp...
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