Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 26-08-2009, 20: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, 20: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, 20: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, 09: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, 11: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, 12: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, 12: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, 13: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, 13: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, 14: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, 14: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, 14: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, 15: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, 09: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, 14: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, 15: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, 15: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, 15: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, 17: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


Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
Avio si prepara ai test del Dimostratore...
Space Pioneer ha annunciato le cause del...
Anthropic avrebbe nuovi antibiotici cont...
Scoperto un 'moltiplicatore nascosto' ne...
DREO: a IFA 2026 4 novità fra cui...
Slackbot genera dashboard e microsite de...
Idrogeno, nuova cella a combustibile rag...
Con la NASA fuori dai giochi, l'ESA risc...
Una falla di ChatGPT permette di estrapo...
Piano clima, 1,34 miliardi per il bonus ...
Porsche esce definitvamente da Bugatti R...
NVIDIA App aggiunge una delle funzioni p...
Come sarebbe il mondo se la luce viaggia...
Titanio, ceramica e zaffiro per HUAWEI W...
Taglio delle accise sul gasolio prorogat...
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: 00:06.


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