Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto
Xiaomi ha portato sul mercato internazionale la nuova serie Redmi Note, che rappresenta spesso una delle migliori scelte per chi non vuole spendere molto. Il modello 15 Pro+ punta tutto su una batteria capiente e su un ampio display luminoso, sacrificando qualcosa in termini di potenza bruta e velocità di ricarica
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione
HONOR ha finalmente lanciato il suo nuovo flagship: Magic 8 Pro. Lo abbiamo provato a fondo in queste settimane e ve lo raccontiamo nella nostra recensione completa. HONOR rimane fedele alle linee della versione precedente, aggiungendo però un nuovo tasto dedicato all'AI. Ma è al suo interno che c'è la vera rivoluzione grazie al nuovo Snapdragon 8 Elite Gen 5 e alla nuova MagicOS 10
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata
Le webcam Insta360 Link 2 Pro e Link 2C Pro sono una proposta di fascia alta per chi cerca qualità 4K e tracciamento automatico del soggetto senza ricorrere a configurazioni complesse. Entrambi i modelli condividono sensore, ottiche e funzionalità audio avanzate, differenziandosi per il sistema di tracciamento: gimbal a due assi sul modello Link 2 Pro, soluzione digitale sul 2C Pro
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 26-08-2009, 21:25   #1
alessia86
Member
 
Iscritto dal: Dec 2008
Messaggi: 125
[JAVA] aiuto sulle JLabel

Ciaoooo a tutti...vorrei sapere se creo una label con un tipo int..ad es:
Codice:
int punteggio=0;

Label lab=new Label(" "+punteggio);
se voglio che punteggio ad es sia visualizzata in grassetto,carattere 30..Come faccio visto che punteggio è di tipo int?
Vi ringrazio!!!
alessia86 è offline   Rispondi citando il messaggio o parte di esso
Old 26-08-2009, 21:29   #2
isAlreadyInUse
Senior Member
 
L'Avatar di isAlreadyInUse
 
Iscritto dal: Sep 2007
Messaggi: 754
Codice:
setFont(new Font("sansserif",Font.BOLD,12);
__________________
http://www.tevigroup.it/
isAlreadyInUse è offline   Rispondi citando il messaggio o parte di esso
Old 26-08-2009, 21:33   #3
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Puoi cambiare il font dell'etichetta:

lab.setFont(lab.getFont().deriveFont(Font.BOLD));

Se invece vuoi scrivere una parte del testo in grassetto puoi usare html:

JLabel lab = new JLabel("<html>Punteggio: <b>" + String.valueOf(punteggio) +"</b></html>");
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 29-08-2009, 10:52   #4
alessia86
Member
 
Iscritto dal: Dec 2008
Messaggi: 125
Grazie mille..Il testo sono riuscita a modificarlo..Ora però è sorto un altro problema..Allora la JLabel l'ho messa in un JPanel e fin qui tutto ok..Ora,qst label mi visualizza il punteggio del videogioco..e quindi si aggiorna di continuo..

Il problema è che le dim della label sono piccole e di conseguenza qnd il punteggio arriva a mille non si visualizza tutto..

Ho provato anche a stampare la larghezza della label e mi da uguale a zero...

Qualcuno sa aiutarmi??

Grazie
alessia86 è offline   Rispondi citando il messaggio o parte di esso
Old 29-08-2009, 12:40   #5
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
le dimensioni dell'etichetta dipendono sia dal contenuto sia dal layout del contenitore in cui l'etichetta si trova. Ad esempio se hai una singola JLabel inserita in un JPanel il cui LayoutManager è un FlowLayout orizzontale e il pannello è a sua volta inserito in un contenitore che gli attribuisce una larghezza sufficientemente ampia allora la larghezza dell'etichetta varierà conformemente al suo contenuto. Nell'esempio che segue la cosa si nota per effetto dell'espansione del bordo assegnato all'etichetta:

Codice:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.concurrent.atomic.*;

public class Main {

	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				start();
			}
		});
	}	
	
	private static void start() {
		final AtomicInteger value = new AtomicInteger(0);
		final JLabel label = new JLabel("Punteggio " + value.get());
		label.setBorder(BorderFactory.createEtchedBorder());
		ActionListener task = new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				label.setText("Punteggio: " + value.addAndGet(100));
			}
		};
		final javax.swing.Timer updater = new javax.swing.Timer(250, task);
		JPanel container = new JPanel(new FlowLayout(FlowLayout.LEFT));
		container.add(label);
		container.setPreferredSize(new Dimension(400, 400));
		JFrame window = new JFrame("Test");
		window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		window.add(container);
		window.pack();
		window.setVisible(true);
		updater.start();
	}
}
La larghezza dell'etichetta e di un qualsiasi altro componente AWT/Swing è zero finchè quel componente non sia inserito in un contenitore di primo livello visualizzabile. In pratica finchè non è sullo schermo getWidth() e getHeight() danno sempre zero.

Puoi imporre al componente una certa dimensione usando setPreferredSize MA il rispetto della dimensione che assegni è condizionato al tipo di Layout e allo spazio effettivamente disponibile.
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 29-08-2009, 13:46   #6
alessia86
Member
 
Iscritto dal: Dec 2008
Messaggi: 125
Grazie per la spiegazione..Ma la label che ho creato l'ho aggiunta ad un jpanel che a sua volta è in un altro pannello e che si trova in un frame..
Forse è qst che non va?
alessia86 è offline   Rispondi citando il messaggio o parte di esso
Old 29-08-2009, 13:53   #7
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Il principio è lo stesso a prescindere dall'annidamento, cioè da quanti pannelli si trovino tra il componente e la finestra.

Diventa "solo" più complicato stabilire una spaziatura dinamica.

Una prova che puoi fare è quella di dare all'etichetta una dimensione idealmente sufficiente a contenere tutti i possibili output.

Prova a dire:

miaEtichetta.setPreferredSize(300, 40);

Così facendo imponi all'etichetta una dimensione preferita di 300 punti in larghezza e 40 in altezza. Il rispetto di questa imposizione dipende dai layout (ad esempio se l'etichetta si trova in un GridLayout è efficace quanto dire magicabula ma se si trova in un FlowLayout l'etichetta riceverà effettivamente quei 300x40 punti)
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 29-08-2009, 14:14   #8
alessia86
Member
 
Iscritto dal: Dec 2008
Messaggi: 125
Se metto setPreferredSize mi da errore..Allora ti scrivo il codice:
Codice:
Label lab=new Label(" "+Punteggio,Label.CENTER);
		
	
        lab.setFont(new Font("sansserif",Font.BOLD,30));
		
		lab.setForeground(Color.red);

 JPanel panel=new JPanel();

panel.setBackground(Color.black);
		
panel.add(lab,BorderLayout.SOUTH);

this.add(panel,BorderLayout.SOUTH);
			
			this.pack();
			this.setVisible(true);

//qst codice appena scritto è contenuto in un JFrame...poi ogni volta che mi devo aggiornare il punteggio richiamo il seguente metodo(anch'esso contenuto nella classe JFrame):


public void aggiornaPunteggio(){
		
		if(mangiato)
			Punteggio+=150;
		else
		
			Punteggio+=100;
		
		
		
		lab.setText(" "+Punteggio);
	
	}
alessia86 è offline   Rispondi citando il messaggio o parte di esso
Old 29-08-2009, 14:23   #9
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
setPreferredSize è un metodo di Component, ce l'ha pure (J)Label. Non dovrebbe darti errore. Nota che l'argomento di setPreferredSize è un Dimension: setPreferredSize(new Dimension(w, h)).

Prova con:

lab.setPreferredSize(new Dimension(300, 40));
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 29-08-2009, 15:19   #10
alessia86
Member
 
Iscritto dal: Dec 2008
Messaggi: 125
ok..cosi' la label mi da..perfetto!! Grazie davv tanto per l'aiuto che mi stai dando..Il pannello che visualizza la label si sovrappone all'immagine che ho messo affianco..ed il pannello non me lo fa spostare un pò più in la..Ho provato a fare:
Codice:
 panel.setLocation(350,560);
Anche con la label ma non si sposta
alessia86 è offline   Rispondi citando il messaggio o parte di esso
Old 29-08-2009, 15:24   #11
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Il posizionamento assoluto (con setLocation) non funziona perchè il LayoutManager lo sovrascrive.

Se usi effettivamente Label nel tuo progetto - e non è un semplice refuso nel post - rimpiazzalo con JLabel.

E' possibile infatti che la sovrapposizione che vedi sia dovuta al mix AWT/Swing (Label è un componente AWT, JLabel è la controparte Swing).

Fai una prova e vedi se risolve.
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 29-08-2009, 15:33   #12
alessia86
Member
 
Iscritto dal: Dec 2008
Messaggi: 125
Cosa molto strana e che non capisco è che se metto JLabel non mi visualizza proprio niente..Nemmeno l'intero frame dove ho inserito le altre cose
alessia86 è offline   Rispondi citando il messaggio o parte di esso
Old 29-08-2009, 16:10   #13
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
In effetti è piuttosto strano.

E' possibile che la cosa sia dovuta all'inserimento della JLabel in una posizione tale da sostituire il precedente contenuto della finestra. Ad esempio se io scrivessi:

JFrame x = new JFrame();
x.add(un bel pannello pieno di cose, BorderLayout.CENTER);

x.add(un'etichetta);

nella mia finestra vedrei solo l'etichetta perchè il LayoutManager BorderLayout stabilisce che quando due componenti sono inseriti nella stessa posizione l'ultimo inserito sostituisce il precedente.

Senza il codice completo è difficile poter dire di più.
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 30-08-2009, 10:06   #14
alessia86
Member
 
Iscritto dal: Dec 2008
Messaggi: 125
Ti scrivo il codice perchè ho capito quello che vuoi dire...però non so proprio come risolvere il problema..


Codice:
//NELLA CLASSE FRAME HO LA SEGUENTE ETICHETTA:

	lab=new Label(" "+Punteggio,Label.CENTER);
		
	lab.setFont(new Font("sansserif",Font.BOLD,30));
        
        lab.setPreferredSize(new Dimension(150, 50));
        
            lab.setForeground(Color.red);


score=kit.getImage("Immagini/score.gif");

//score è l'immagine che viene sovrapposta dalla label

	 panel=new JPanel();
		panel.setBackground(Color.black);
                                panel.add(lab,BorderLayout.SOUTH);
			this.add(panel,BorderLayout.SOUTH);
			
			this.pack();
			this.setVisible(true);
			
			kit.getDefaultToolkit().sync();





//L'IMMAGINE SCORE VIENE DISEGNATA DALLA CLASSE RENDER


public void render()
{
	
	bs=getBufferStrategy();
	g=bs.getDrawGraphics();
	
             g.drawImage(score, 250, 560, this);

bs.show();


}
alessia86 è offline   Rispondi citando il messaggio o parte di esso
Old 30-08-2009, 15:38   #15
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Quella porzione di codice è corretta. Il BufferStrategy che usi nel metodo render è di un Canvas che si trova al centro della finestra?
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 30-08-2009, 16:20   #16
alessia86
Member
 
Iscritto dal: Dec 2008
Messaggi: 125
non so se vuol dire al centro..Ti mando il codice dove faccio partire qst frame:
Codice:

public Gioco(GraphicsDevice device,Frame F)
	{
		
		
		DisplayMode d=new DisplayMode(800,600,32,0);
		
	
	    	 
	    	 
	
		Fr=new FrameG(d,F,device);
	
	   
		Fr.createBufferStrategy(2);
	
		device.setFullScreenWindow(Fr);
		
	
	

		try {
			if(device.isDisplayChangeSupported())
				device.setDisplayMode(d);
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		
		

	}
}
alessia86 è offline   Rispondi citando il messaggio o parte di esso
Old 30-08-2009, 16:36   #17
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
MMhhhh... la trama si complica

La finestra che va in fullscreen e sulla quale disegni usando il BufferStrategy è anche la stessa a cui aggiungi i componenti?

Se sì non funziona come ti aspetti.

BufferStrategy e il "normale" rendering dei componenti sono mutualmente esclusivi.

Puoi ottenere varie bizzarrie perchè hai il tuo ciclo di redering sulla superficie della finestra frapposto alle operazioni di disegno che il framework cerca di fare sulla stessa superficie: quando disegni col bufferstrategy cancelli tutto quello che stava cercando di fare AWT/Swing, quando AWT/Swing disegnano cancellano tutto quello che stavi cercando di fare tu. Se in mezzo ci sono dei componenti trasparenti la cosa diventa anche più strana perchè parte della superficie viene rigenerata e parte no.

Se vuoi fare un mix di BufferStrategy e componenti devi usare un Canvas per la parte di interfaccia che usa BufferStrategy e una normale catena di componenti AWT per la parte a componenti (puoi anche usare componenti Swing purchè non siano in tutto o in parte sovrapposti al canvas).

Altrimenti puoi rinunciare ai componenti e usare solo BufferStrategy. In questo caso per disegnare, ad esempio, il punteggio, dirai nel tuo ciclo di rendering:

g.drawString("Punteggio: " + punteggio, x, y);

Puoi anche usare un componente come Label come renderer:

g.translate(x,y);
label.print(g);
g.translate(-x,-y);
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 30-08-2009, 16:41   #18
alessia86
Member
 
Iscritto dal: Dec 2008
Messaggi: 125
Si..è la stessa..in pratica in quella finestra c'è il videogioco...e poi sempre u di essa ho disegnato diciamo le "vite" del personaggio del videogioco..ed avevo aggiunto la label ....Altrimenti come posso fare per ottenere sempre una finestra a schermo intero senza avere qst tipo di interferenze?
alessia86 è offline   Rispondi citando il messaggio o parte di esso
Old 30-08-2009, 18:42   #19
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
La finestra può andare in modalità schermo intero a prescindere dal suo contenuto. Per intenderci non è necessario usare un BufferStrategy sulla finestra per poter dire device.setFullscreenWindow(x).

Alla fine della fiera io eliminerei tutta la componentistica (etichette, pannelli, pulsanti eccetera) e andrei direttamente sul disegno nudo e crudo.

Ad esempio se vuoi disegnare il testo "Punteggio XYZ" usi un TextLayout al posto di una Label. Se dai in pasto a un TextLayout una stringa e un font quello ti dice quanto è grande il rettangolo necessario per disegnarla. A quel punto puoi disegnarla "in basso" semplicemente sottraendo all'altezza della tua finestra l'altezza del TextLayout.

Esempio rapido rapido:

Codice:
import java.awt.*;
import java.awt.font.*;
import java.awt.geom.*;
import java.awt.image.*;
import java.awt.event.*;
import javax.swing.*;

public class Main {

	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				start();
			}
		});
	}
	
	private static final Font FONT_PUNTEGGIO = new Font("serif", Font.BOLD, 30);
	private static int punti;
	
	private static void start() {
		final JFrame window = new JFrame("Test");
		ActionListener painter = new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				render(window);
			}
		};
		final javax.swing.Timer timer = new javax.swing.Timer(1, painter);
		window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		window.addWindowListener(new WindowAdapter() {
			public void windowOpened(WindowEvent e) {
				window.createBufferStrategy(2);
				timer.start();//avvia il motore di gioco
			}
			
			public void windowClosing(WindowEvent e) {
				timer.stop();//ferma il motore di gioco
			}
		});
		window.setSize(640,480);
		window.setVisible(true);
	}
	
	private static void render(JFrame window) {
		BufferStrategy bs = window.getBufferStrategy();
		Insets border = window.getInsets();
		int width = window.getWidth() - border.left - border.right;
		int height = window.getHeight() - border.top - border.bottom;
		Graphics2D g = (Graphics2D)bs.getDrawGraphics();
		g.translate(border.left, border.top);
		
		g.setPaint(Color.BLACK);	//disegna lo sfondo
		g.fillRect(0,0,width,height);
		
		String punteggio = "Punteggio: " + punti; //disegna il punteggio
		TextLayout text = new TextLayout(punteggio, FONT_PUNTEGGIO, g.getFontRenderContext());
		Rectangle2D area = text.getBounds();
		double x = Math.min(width - area.getWidth(), 2 * width / 3);
		double y = height - area.getHeight();
		g.translate(x,y);
		g.setPaint(Color.RED);
		text.draw(g, 0, 0);
		g.translate(-x,-y);
		
		g.translate(border.left, border.top);
		
		bs.show(); //proietta il buffer sullo schermo
		
		punti++;
	}
}
Tu il ciclo di rendering ce l'hai già, devi solo trasferire là dentro le operazioni di disegno che ora affidi ai componenti.
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto Redmi Note 15 Pro+ 5G: autonomia monstre e displ...
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione HONOR Magic 8 Pro: ecco il primo TOP del 2026! L...
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata Insta360 Link 2 Pro e 2C Pro: le webcam 4K che t...
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza Motorola edge 70: lo smartphone ultrasottile che...
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026 Display, mini PC, periferiche e networking: le n...
Televisori, asse Sony - TCL: c’è ...
Uso del carbone in calo in Cina e India ...
Una potente tempesta solare colpisce la ...
Italo fa la storia: Starlink arriver&agr...
Windows 11: rilasciati i fix di emergenz...
MacBook Air M4 in offerta su Amazon: il ...
Smartphone Motorola potenti a prezzi mai...
Dopo Las Vegas, Sphere raddoppia: in Mar...
Smarthome Tapo: funzionano bene, costano...
Valve aggiorna le linee guida Steam: chi...
PC portatili sempre più cari: ecc...
Samsung TV in offerta su Amazon: Neo QLE...
Sì, c'è un display è...
Fast restart di Windows spiegato 30 anni...
Il mondo piange Gladys West, la matemati...
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: 12:02.


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