Torna indietro   Hardware Upgrade Forum > Software > Programmazione

ASUS NUC 15 Pro e NUC 15 Pro+, mini PC che fondono completezza e duttilità
ASUS NUC 15 Pro e NUC 15 Pro+, mini PC che fondono completezza e duttilità
NUC 15 Pro e NUC 15 Pro+ sono i due nuovi mini-PC di casa ASUS pensati per uffici e piccole medie imprese. Compatti, potenti e pieni di porte per la massima flessibilità, le due proposte rispondono in pieno alle esigenze attuali e future grazie a una CPU con grafica integrata, accompagnata da una NPU per la gestione di alcuni compiti AI in locale.
Cybersecurity: email, utenti e agenti IA, la nuova visione di Proofpoint
Cybersecurity: email, utenti e agenti IA, la nuova visione di Proofpoint
Dal palco di Proofpoint Protect 2025 emerge la strategia per estendere la protezione dagli utenti agli agenti IA con il lancio di Satori Agents, nuove soluzioni di governance dei dati e partnership rafforzate che ridisegnano il panorama della cybersecurity
Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti
Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti
Dopo alcuni anni di assenza dai cataloghi dei suoi televisori, Hisense riporta sul mercato una proposta OLED che punta tutto sul rapporto qualità prezzo. Hisense 55A85N è un televisore completo e versatile che riesce a convincere anche senza raggiungere le vette di televisori di altra fascia (e altro prezzo)
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 20-07-2005, 10:21   #1
fbcyborg
Senior Member
 
L'Avatar di fbcyborg
 
Iscritto dal: Jan 2004
Città: ROMA
Messaggi: 2055
[JAVA] Eventi finestre

Ciao Ragazzi,
ho bisogno di un consiglio sulle GUI che non so proprio come risolvere un problema.
Ho un Frame principale della mia applicazione.. Esso ha dei pannelli con dei bottoni. Ho collegato ad un bottone un evento secondo cui deve aprire un nuovo JFrame che consiste in un form di insermento.
Il problema è che la finestra principale (sottostante) rimane attiva, dandomi quindi la possibilità di di premere di nuovo quel bottone ed aprire un nuovo JFrame associato. Volendo evitare questo, avrei intenzione di disabilitare il form principale, in modo da non poter più aprire form secondari. Il problema è che non so come riabilitare il form principale alla chiusura della maschera appena aperta.

Grazie per i consigli
__________________
^ThE CyBoRg^
fbcyborg è offline   Rispondi citando il messaggio o parte di esso
Old 20-07-2005, 10:56   #2
Alvaro Vitali
Member
 
L'Avatar di Alvaro Vitali
 
Iscritto dal: Apr 2005
Messaggi: 224
Fai implementare alla classe del frame principale l'intefaccia windowlsitener (o estendi la classe windowadapter), registri tale classe come ascoltatore degli eventi di finestra del frame secodario e nel metodo windowClosing che dovrai implementare (nella classe del frame principale) fai in modo che il frame si "riabiliti".

Più comodo secondo me è invece che aprire e chiudere il jframe secondario , renderlo "visibile" (setVisible(true)) alla pressione del bottone sul frame principale così ad una successiva pressione del bottone non si aprirà una nuova finestra ma verrà invocato di nuovo il setVisisble(true) , poi col bottone del frame secondario prendi i dati del form e rendi invisibile il frame.

ciao
Alvaro Vitali è offline   Rispondi citando il messaggio o parte di esso
Old 20-07-2005, 10:56   #3
Molz
Member
 
Iscritto dal: May 2003
Messaggi: 119
non so come risolvere il tuo problema, forse basta catturare l'evento onWindowClosing (o un nome simile) del secondo JFrame.
Cmq quando ho un bottone in un JFrame principale che deve aprire un altro JFrame secondario di solito io creo il frame secondario nel costruttore del frame principale senza poi mostrarlo a video.
Poi all'evento del click del bottone eseguo il metodo show del JFrame secondario, così anche se il bottone viene premuto 1000 volte di JFrame secondari se ne vede 1 solo.
Molz è offline   Rispondi citando il messaggio o parte di esso
Old 20-07-2005, 10:58   #4
Molz
Member
 
Iscritto dal: May 2003
Messaggi: 119
azz, Alvaro Vitali mi ha anticipato di poki secondi!

Ed è stato pure più esauriente, devo migliorarmi x il futuro
Molz è offline   Rispondi citando il messaggio o parte di esso
Old 20-07-2005, 11:10   #5
fbcyborg
Senior Member
 
L'Avatar di fbcyborg
 
Iscritto dal: Jan 2004
Città: ROMA
Messaggi: 2055
Grazie Alvaroo!!!
provo subito! ti faccio sapere!!
grazie ragazzi...
__________________
^ThE CyBoRg^
fbcyborg è offline   Rispondi citando il messaggio o parte di esso
Old 20-07-2005, 11:46   #6
fbcyborg
Senior Member
 
L'Avatar di fbcyborg
 
Iscritto dal: Jan 2004
Città: ROMA
Messaggi: 2055
Dunque, ho fatto come hai detto tu Alvaro.. optando per la seconda scelta. E' molto più comodo caricare tutti i vari frames all'avvio del programma principale e renderli visibili a tempo opportuno.
Ora dovrei chiudere il frame in questione collegando l'evento di chiusura ad un bottone. Come devo fare?
__________________
^ThE CyBoRg^
fbcyborg è offline   Rispondi citando il messaggio o parte di esso
Old 20-07-2005, 11:51   #7
Molz
Member
 
Iscritto dal: May 2003
Messaggi: 119
Allo stesso modo per chiudere i frame basta solo che li rendi non visibili, quindi basta usare il metodo hide() (oppure setVisible(false)) invece di show() (o setVisible(true))
Molz è offline   Rispondi citando il messaggio o parte di esso
Old 20-07-2005, 11:55   #8
fbcyborg
Senior Member
 
L'Avatar di fbcyborg
 
Iscritto dal: Jan 2004
Città: ROMA
Messaggi: 2055
OK grazie, tanto a questo punto, visto che creo i nuovi oggetti Jframe nella classe principale, posso controllarli da lì...
__________________
^ThE CyBoRg^
fbcyborg è offline   Rispondi citando il messaggio o parte di esso
Old 20-07-2005, 12:17   #9
fbcyborg
Senior Member
 
L'Avatar di fbcyborg
 
Iscritto dal: Jan 2004
Città: ROMA
Messaggi: 2055
Quote:
Originariamente inviato da Molz
Allo stesso modo per chiudere i frame basta solo che li rendi non visibili, quindi basta usare il metodo hide() (oppure setVisible(false)) invece di show() (o setVisible(true))
Il problema è che non posso fare this.setVisible(false) .

riepilogando: la mia GUI principale, crea un frame, lo visualizza su pressione di un tasto. Questo frame ha un tasto "Annulla". Tale tasto quando premuto deve rendere nascosto il frame. Non so come fare purtroppo... Questo perchè non trovo un metodo che lo faccia.
Ditemi se devo estendere ulteriori classi oltre a JFrame.
__________________
^ThE CyBoRg^
fbcyborg è offline   Rispondi citando il messaggio o parte di esso
Old 20-07-2005, 12:26   #10
Molz
Member
 
Iscritto dal: May 2003
Messaggi: 119
Quando crei l'event listener per il bottone annulla non usare il costruttore di default ma fanne uno che prenda come parametro il tuo frame, una cosa simile
Codice:
nel JFrame

AnnullaListener a=new AnnullaListener (this);
annullaButton.addActionListener(a); //dove annullaButton è il nome del bottone "Annulla"


...

fouri dal JFrame
class AnnullaListener implements ActionListener{
frameSecondario fs; //dove frameSecondario è il nome della classe che rappresenta il tuo frame
AnnullaListener (frameSecondario f){
fs=f
}

metodo chiamato quando premi il tasto annulla di cui non ricordo il nome ()
{
fs.hide();
}

}
Spero di essermi spiegato in maniera decente, altrimenti richiedi pure spiegazioni

Ultima modifica di Molz : 20-07-2005 alle 12:28.
Molz è offline   Rispondi citando il messaggio o parte di esso
Old 20-07-2005, 12:29   #11
Alvaro Vitali
Member
 
L'Avatar di Alvaro Vitali
 
Iscritto dal: Apr 2005
Messaggi: 224
Ma scusa quando crei il JButton Annulla imposterai una scoltatore per l'evento di pressione:

JButton annulla = JBUtton("annulla");
annulla.addActionListener(oggetto-che-ascolta);

l' oggetto-che-ascolta implementerà ActionListener ed avrà un metodo ActionPerfomed(ActionEvent e) in cui puoi chiamare il setVisible(false) se l'oggetto che ha invocato l'evento è annulla.

oggetto-che-ascolta potrebbe essere il tuo frame principale...oppure lo stesso frame secondario, in tal caso annulla.addActionListener(oggetto-che-ascolta); diventerà annulla.addActionListener(this); ed il frame secondario dovrà implementare ActionListener ed il metodo ActionPerformed come sopra...

Secondo caso:
class frameSecondario extends JFrame implements ActionListener {

private JButton annulla = JBUtton("annulla");

public frameSecondario() {

super();
// bla bla bla
annulla.addActionListener(this);
// aggiungi il bottone al layout
}

public void ActionPerfomed(ActionEvent e) {

Object source = e.getSource();

if (source==annulla) this.setVisible(false);
}

}

Mi sto incastrando con le risposte di Molz ma credo che stiamo dicendo le stesse cose...

Ultima modifica di Alvaro Vitali : 20-07-2005 alle 12:36.
Alvaro Vitali è offline   Rispondi citando il messaggio o parte di esso
Old 20-07-2005, 12:34   #12
Molz
Member
 
Iscritto dal: May 2003
Messaggi: 119
Quote:
Originariamente inviato da Alvaro Vitali
Mi sto incastrando con le risposte di Molz ma credo che stiamo dicendo le stesse cose...
Infatti
Molz è offline   Rispondi citando il messaggio o parte di esso
Old 20-07-2005, 12:35   #13
fbcyborg
Senior Member
 
L'Avatar di fbcyborg
 
Iscritto dal: Jan 2004
Città: ROMA
Messaggi: 2055
Scusami.. purtroppo ci vuole un po' di pazienza con queste cose.. resta difficile anche a me spiegare bene il problema.. Intanto ti dico che sto usando Eclipse per realizzare la gui. Non so se hai in mente com'è lo stile di programmazione di Eclipse, ma posso dirti che ci sono tanti metodi getNomeComponente()
per inizializzializzarli;
Codice:
per esempio getAnnullaButton(){
    ... creazione oggetto
    ... impostazioni varie
    annullaButton.addActionListener(new java.awt.event.ActionListener() {
              public void actionPerformed(java.awt.event ActionEvent e) {
                     this.hide(); // o qualcosa del genere, intendendo this come il frame
              }
    });
}
devo quindi inserire cosa voglio che faccia la mia finestra dentro quel pezzo di codice ActionPerformed...
Non posso nemmeno mettermi a cambiare troppo la struttura del mio programma perchè ho la consegna di un progetto molto presto e mi devo pure sbrigare.. porca miseria!!!
Grazie amico... grazie x la disponibilità
__________________
^ThE CyBoRg^
fbcyborg è offline   Rispondi citando il messaggio o parte di esso
Old 20-07-2005, 12:38   #14
fbcyborg
Senior Member
 
L'Avatar di fbcyborg
 
Iscritto dal: Jan 2004
Città: ROMA
Messaggi: 2055
ah, ecco, nel frattempo che scrivevo stavate rispondendo...
ho letto quello che dice Alvaro Vitali...
dunque, se dovessi fare come ha detto lui, come lo adatto a quello stralcio di codice che ho postato?
__________________
^ThE CyBoRg^
fbcyborg è offline   Rispondi citando il messaggio o parte di esso
Old 20-07-2005, 12:39   #15
Alvaro Vitali
Member
 
L'Avatar di Alvaro Vitali
 
Iscritto dal: Apr 2005
Messaggi: 224
Anche io uso eclipse ma la Gui cmq la faccio a mano proprio perchè non mi piace come organizza le cose, cerca di replicare questo che ti scrivo, in questo modo deleghi al frame secondario il compito di ascoltare la pressione del tasto e rendersi invisibile (mi pare che solo questo non riuscivi a fare):

Codice:
class frameSecondario extends JFrame implements ActionListener {

private JButton annulla = JBUtton("annulla");

public frameSecondario() {

super();
// bla bla bla
annulla.addActionListener(this);
// aggiungi il bottone al layout
}

public void ActionPerfomed(ActionEvent e) {

Object source = e.getSource();

if (source==annulla) this.setVisible(false);
}

}
Alvaro Vitali è offline   Rispondi citando il messaggio o parte di esso
Old 20-07-2005, 12:45   #16
Molz
Member
 
Iscritto dal: May 2003
Messaggi: 119
Come ti ho detto io farei così

Codice:
per esempio getAnnullaButton(){
    ... creazione oggetto
    ... impostazioni varie
    annullaButton.addActionListener(new MioListener(this));
}

.....
} //chiusura della parentesi graffa della classe principale (il tuo JFrame)

class MioListener implements java.awt.event.ActionListener() {
nomeDelleClasseCheRappresentaIlJFrame a;
MioListener (nomeDelleClasseCheRappresentaIlJFrame a2){
a=a2;
}

   public void actionPerformed(java.awt.event ActionEvent e) {
                     a.hide();               }
    }

Stranamente Alvaro mi ha anticipato, i nostri metodi sono diversi, ma vanno beneone entrambi.

Ultima modifica di Molz : 20-07-2005 alle 12:49.
Molz è offline   Rispondi citando il messaggio o parte di esso
Old 20-07-2005, 13:16   #17
fbcyborg
Senior Member
 
L'Avatar di fbcyborg
 
Iscritto dal: Jan 2004
Città: ROMA
Messaggi: 2055
OK grazie!!! finalmente sono riuscito a fare questa cosa.. anche se con fatica ma l'importante è che ora ci sia riuscito.
Adesso però, oltre a questo bottone c'è anche un bottone OK, che dopo aver fatto determinate operazioni definite in un actionPerformed, anch'esso deve nascondere il frame...
Il codice di uno dei bottoni annulla che ho scritto è:
Codice:
// Bottone Annulla (OK - va bene)
private JButton getCancelButtonAdd() {
    if (cancelButtonAdd == null) {
        cancelButtonAdd = new JButton();
        cancelButtonAdd.setBounds(338, 147, 94, 25);
        cancelButtonAdd.setText("Annulla");
        cancelButtonAdd.addActionListener(new CloseListener(this));
    }
return cancelButtonAdd;
}
//*************************************
//  Classe ulteriore per chiudere il frame... OK - Va bene...
class CloseListener implements java.awt.event.ActionListener{
	FrmInserisci f;
	public CloseListener(FrmInserisci frm){
		f = frm;
	}
	
	public void actionPerformed(java.awt.event.ActionEvent e){
		f.hide();
	}
}
//*************************************
//Metodo di un bottone OK:
private JButton getOkButtonAdd() {
	if (okButtonAdd == null) {
		okButtonAdd = new JButton();
		okButtonAdd.setBounds(243, 146, 87, 26);
		okButtonAdd.setText("OK");
		okButtonAdd.addActionListener(new java.awt.event.ActionListener() { 
		public void actionPerformed(java.awt.event.ActionEvent e) {    

// deve effettuare delle operazioni e poi chiudere!!!! come il tasto annulla
					
				}
			});
		}
		return okButtonAdd;
	}
Questo è quanto... grazie ancora!
__________________
^ThE CyBoRg^
fbcyborg è offline   Rispondi citando il messaggio o parte di esso
Old 20-07-2005, 13:24   #18
Molz
Member
 
Iscritto dal: May 2003
Messaggi: 119
basta che associ al bottone OK lo stesso listener che al bottone Annulla

okButtonAdd.addActionListener(new CloseLintener(this))

e poi come diceva alvaro vitali è sufficiente che nella funzione actionPerformed(ActionEvent e) tu invochi il metodo getSource sull'evento

Object source = e.getSource();

e poi esegui il controllo

if(source==okButtonAdd ){
esegui le tue operazioni
}
//e poi in ogni caso
f.hide();


Altrimenti puoi creare un listener diverso per ogni bottone che crei e in tal caso sarebbe
okButtonAdd.addActionListener(new OKCloseLintener(this))
e poi la stessa procedura di prima per il bottone Annulla

Ultima modifica di Molz : 20-07-2005 alle 13:27.
Molz è offline   Rispondi citando il messaggio o parte di esso
Old 20-07-2005, 13:46   #19
fbcyborg
Senior Member
 
L'Avatar di fbcyborg
 
Iscritto dal: Jan 2004
Città: ROMA
Messaggi: 2055
OK! c'è solo un piccoliiiiiiissimo problema:
if(source==okButtonAdd ) non posso farlo perchè non mi vede quella variabile....
anche se ritengo sia una cosa assurda
__________________
^ThE CyBoRg^
fbcyborg è offline   Rispondi citando il messaggio o parte di esso
Old 20-07-2005, 14:04   #20
Alvaro Vitali
Member
 
L'Avatar di Alvaro Vitali
 
Iscritto dal: Apr 2005
Messaggi: 224
Che visibilità ha quel bottone?
In alternativa puoi impostare

okButtonAdd.setActionCommand("ok");


e poi sostituire

String command = e.getActionCommand();

if (command.equals("ok")) {
}

al posto di if(source==okButtonAdd )
Alvaro Vitali è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


ASUS NUC 15 Pro e NUC 15 Pro+, mini PC che fondono completezza e duttilità ASUS NUC 15 Pro e NUC 15 Pro+, mini PC che fondo...
Cybersecurity: email, utenti e agenti IA, la nuova visione di Proofpoint Cybersecurity: email, utenti e agenti IA, la nuo...
Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti Hisense A85N: il ritorno all’OLED è convi...
Recensione Borderlands 4, tra divertimento e problemi tecnici Recensione Borderlands 4, tra divertimento e pro...
TCL NXTPAPER 60 Ultra: lo smartphone che trasforma la lettura da digitale a naturale TCL NXTPAPER 60 Ultra: lo smartphone che trasfor...
Steelseries Arctis Nova Elite: le prime ...
30 anni di PlayStation da indossare: arr...
Amazon lancia gli Echo più potent...
Amazon rinnova la gamma Fire TV: ecco le...
Ring lancia le sue prime videocamere con...
Blink amplia la gamma di videocamere di ...
Jaguar Land Rover riprende (gradualmente...
HONOR inaugura il primo ALPHA Flagship S...
Yamaha: ecco il brevetto del 'finto moto...
'Console obsoleta e utenti ingannati': u...
Stop al ransomware su Google Drive, graz...
L'IA è la nuova interfaccia utent...
Battlefield 6: confermata la dimensione ...
Windows 11 porta il Wi-Fi 7 alle aziende...
Logitech MX Master 4 subito disponibile ...
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: 21:07.


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