Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Tastiera gaming MSI GK600 TKL: switch hot-swap, display LCD e tre modalità wireless
Tastiera gaming MSI GK600 TKL: switch hot-swap, display LCD e tre modalità wireless
MSI FORGE GK600 TKL WIRELESS: switch lineari hot-swap, tripla connettività, display LCD e 5 strati di fonoassorbimento. Ottima in gaming, a 79,99 euro
DJI Osmo Pocket 4: la gimbal camera tascabile cresce e ha nuovi controlli fisici
DJI Osmo Pocket 4: la gimbal camera tascabile cresce e ha nuovi controlli fisici
DJI porta un importante aggiornamento alla sua linea di gimbal camera tascabili con Osmo Pocket 4: sensore CMOS da 1 pollice rinnovato, gamma dinamica a 14 stop, profilo colore D-Log a 10 bit, slow motion a 4K/240fps e 107 GB di archiviazione integrata. Un prodotto pensato per i creator avanzati, ma che convince anche per l'uso quotidiano
Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori
Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori
Il primo headset open-back della linea INZONE arriva a 200 euro con driver derivati dalle cuffie da studio MDR-MV1 e un peso record di soli 199 grammi
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 04-04-2014, 08:39   #1
Peppe 93
Junior Member
 
Iscritto dal: Apr 2013
Messaggi: 27
[Java] Richiamare Oggetto

sono nuovo del Java ed ho ancora problemi con alcune cose.
il mio problema è questo:

Codice:
import java.awt.BorderLayout;


public class frame1 extends JFrame {

	private JPanel contentPane;
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					frame1 frame = new frame1();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	public frame1() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JButton Selezione = new JButton("Seleziona File");
		Selezione.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent arg0) {
				
				JFileChooser scelta= new JFileChooser();
				FileFilter documentoWord = new FileNameExtensionFilter("DOC file", "doc");
				FileFilter documentoPdf = new FileNameExtensionFilter("PDF file", "pdf");
				FileFilter documentoOdt = new FileNameExtensionFilter("ODT file", "odt");
				
				scelta.addChoosableFileFilter(documentoPdf);
				scelta.addChoosableFileFilter(documentoOdt);
				scelta.setFileFilter(documentoWord);
				
				int sel=scelta.showDialog(null, "Scegli File..");
				if(sel==JFileChooser.APPROVE_OPTION){
					File scelto = scelta.getSelectedFile();
					String FileN=scelto.getName();
					String FileP=scelto.getPath();
					DatiFile a =new DatiFile();
					a.setDati(FileN, FileP);
				}
				
			}
		});
		Selezione.setBounds(303, 23, 105, 23);
		contentPane.add(Selezione);
		JLabel stringaPath = new JLabel("Nessun file selezionato");
		stringaPath.setForeground(new Color(0, 0, 0));
		stringaPath.setBackground(Color.LIGHT_GRAY);
		stringaPath.setBounds(33, 22, 234, 24);
		contentPane.add(stringaPath);
		
		if ((a.getNome()==null)||(a.getPath==null)) stringaPath.setText("Nessun File Selezionato");
		else stringaPath.setText(a.getNome + " " + a.getPath);
	}

	public class DatiFile{
		public String NomeFile;
		public String PathFile;
		
		public String getNome(){
			return this.NomeFile;
		}
		public String getPath(){
			return this.PathFile;
		}
		
		public void setDati(String Nome, String Path) {
			this.NomeFile= Nome;
			this.PathFile= Path;
			
		}
		
	}
}
nel richiamare l'oggetto "a" fuori dal metodo (actionlistener) in cui è stato creato mi da errore, so che sto sbagliando qualcosa nel passaggio dei valori ma non so cosa.
Peppe 93 è offline   Rispondi citando il messaggio o parte di esso
Old 04-04-2014, 16:03   #2
gianmpu
Senior Member
 
Iscritto dal: Oct 2010
Messaggi: 1609
In Java un oggetto è visibile solo nella porzione di codice delimitata dalle due parentesi in cui è stato dichiarato.
Nel tuo caso, se dichiari a in mouseClicked non lo vedi al di fuori
Se ti serve in altri punti del codice, devi spostare la dichiarazione di a

Ultima modifica di gianmpu : 04-04-2014 alle 16:06.
gianmpu è offline   Rispondi citando il messaggio o parte di esso
Old 04-04-2014, 16:46   #3
Peppe 93
Junior Member
 
Iscritto dal: Apr 2013
Messaggi: 27
Quote:
Originariamente inviato da gianmpu Guarda i messaggi
In Java un oggetto è visibile solo nella porzione di codice delimitata dalle due parentesi in cui è stato dichiarato.
Nel tuo caso, se dichiari a in mouseClicked non lo vedi al di fuori
Se ti serve in altri punti del codice, devi spostare la dichiarazione di a
si si lo sapevo..solo non mi rendo conto dove dovrei dichiararlo per poterlo usare...

se lo dichiaro all'inizio del frame mi dice: "cannot refer to a non-final variable a inside an inner class defined in a different method" se invece lo metto dentro al listener non lo riconosce fuori e se invece lo metto all'inizio del file non mi da errore ma la label continua a mostrare path e nome del file come nulli...come devo fare?

Ultima modifica di Peppe 93 : 04-04-2014 alle 17:05.
Peppe 93 è offline   Rispondi citando il messaggio o parte di esso
Old 04-04-2014, 16:55   #4
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2789
Perché se la dichiari all'interno di un metodo è una variabile locale che cioè esiste solo finché il metodo in cui è dichiarata è in esecuzione, quello che a te serve è una variabile d'istanza che invece esiste finché l'oggetto di cui è parte è in memoria.
La devi dichiarare allo stesso livello di
Codice:
private JPanel contentPane;
In verità vedendo velocemente il tuo codice non mi torna molto l'utilizzo che fai di questa variabile "a"... Comunque dichiarandola come variabile d'istanza e inizializzandola a null dovrebbe compilare.
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 04-04-2014, 17:12   #5
Peppe 93
Junior Member
 
Iscritto dal: Apr 2013
Messaggi: 27
Quote:
Originariamente inviato da wingman87 Guarda i messaggi
Perché se la dichiari all'interno di un metodo è una variabile locale che cioè esiste solo finché il metodo in cui è dichiarata è in esecuzione, quello che a te serve è una variabile d'istanza che invece esiste finché l'oggetto di cui è parte è in memoria.
La devi dichiarare allo stesso livello di
Codice:
private JPanel contentPane;
In verità vedendo velocemente il tuo codice non mi torna molto l'utilizzo che fai di questa variabile "a"... Comunque dichiarandola come variabile d'istanza e inizializzandola a null dovrebbe compilare.

praticamente a me serviva inizialmente che dopo aver scelto il file la label mi mostrasse path e nome del file
Peppe 93 è offline   Rispondi citando il messaggio o parte di esso
Old 04-04-2014, 17:19   #6
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2789
Quindi il testo della label lo devi modificare quando viene fatto click sul pulsante, cioè nel listener dell'evento.
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 04-04-2014, 17:27   #7
Peppe 93
Junior Member
 
Iscritto dal: Apr 2013
Messaggi: 27
Quote:
Originariamente inviato da wingman87 Guarda i messaggi
Quindi il testo della label lo devi modificare quando viene fatto click sul pulsante, cioè nel listener dell'evento.
esattamente ma ho verificato che i valori passati sono sempre null
Peppe 93 è offline   Rispondi citando il messaggio o parte di esso
Old 04-04-2014, 19:05   #8
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2789
Prova a postare il codice corretto e vediamo...
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 04-04-2014, 19:12   #9
Peppe 93
Junior Member
 
Iscritto dal: Apr 2013
Messaggi: 27
Quote:
Originariamente inviato da wingman87 Guarda i messaggi
Prova a postare il codice corretto e vediamo...
grazie ma non serve, ho risolto..avevo dimenticato di spostare la dichiarazione della label all'inizio del frame
Peppe 93 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Tastiera gaming MSI GK600 TKL: switch hot-swap, display LCD e tre modalità wireless Tastiera gaming MSI GK600 TKL: switch hot-swap, ...
DJI Osmo Pocket 4: la gimbal camera tascabile cresce e ha nuovi controlli fisici DJI Osmo Pocket 4: la gimbal camera tascabile cr...
Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori Sony INZONE H6 Air: il primo headset open-back d...
Nutanix cambia pelle: dall’iperconvergenza alla piattaforma full stack per cloud ibrido e IA Nutanix cambia pelle: dall’iperconvergenza alla ...
Recensione Xiaomi Pad 8 Pro: potenza bruta e HyperOS 3 per sfidare la fascia alta Recensione Xiaomi Pad 8 Pro: potenza bruta e Hyp...
Spento lo strumento LECP della sonda spa...
Voyager Technologies ha siglato un accor...
GoPro annuncia la linea MISSION 1 con tr...
Alcune varianti dei futuri Samsung Galax...
Il ridimensionamento di OnePlus in Europ...
Il cofondatore di Netflix ha lasciato l'...
ASUS porta in Italia il nuovo Zenbook Du...
Assassin's Creed: Black Flag Resynced, s...
Xbox Game Pass cambierà: tra le n...
I nuovi Surface Pro e Laptop sono vicini...
OnePlus ci riprova con la fascia bassa: ...
La Top 10 delle offerte Amazon del weeke...
XGIMI MoGo 2 Pro a 339€: Google TV con N...
Forum IT & Intelligence 2026: dall'A...
iPhone 16e per la prima volta a meno di ...
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: 04:37.


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