Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Redmi Watch 6 in prova: lo smartwatch con ampio display da 2000 nit a meno di 100 euro
Redmi Watch 6 in prova: lo smartwatch con ampio display da 2000 nit a meno di 100 euro
Xiaomi ha portato Redmi Watch 6 anche sul mercato italiano, puntando su un display AMOLED da 2,07 pollici con picco di luminosità a 2000 nit, frame in alluminio da 9,9mm e un'autonomia dichiarata di 12 giorni. Lo smartwatch gira su HyperOS 3 e integra GPS, Bluetooth 5.4 e oltre 150 sport mode. Il tutto a meno di 100 euro
Mad Catz M.M.O. 7+: lo stesso DNA del R.A.T. 8+ ADV, ma con molti più pulsanti
Mad Catz M.M.O. 7+: lo stesso DNA del R.A.T. 8+ ADV, ma con molti più pulsanti
Con 22 tasti, il pulsante 5D, lo Shift Mode e il sensore PixArt 3395 da 26.000 DPI, il nuovo mouse wireless di Mad Catz si rivolge in modo preciso ai giocatori di MMO e RPG. Ma chi conosce già il R.A.T. 8+ ADV si accorgerà subito di quanto i due prodotti condividano, e di dove invece divergono
Radeon RX 9070 GRE, AMD la porta in tutto il mondo | Recensione Gigabyte Gaming OC
Radeon RX 9070 GRE, AMD la porta in tutto il mondo | Recensione Gigabyte Gaming OC
Abbiamo provato la Gigabyte Radeon RX 9070 GRE Gaming OC, nuova proposta RDNA 4 che si inserisce tra GeForce RTX 5060 Ti e RTX 5070. Prestazioni solide in rasterizzazione e ray tracing, frequenze elevate grazie all'overclock di fabbrica e raffreddamento efficace: ecco come si comporta nei nostri test.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 18-03-2004, 14:14   #1
cn73
Senior Member
 
L'Avatar di cn73
 
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
JAVA: problema con JFileChooser

Avrei la necessità di impedire la chiusura di un JFileChooser dal pulsantino "x"posto nell'angolo superiore destro della dialog...
O almeno di intercettare l'evento di chiusura in modo da ridefinirlo...
Qualcuno ha un'idea di come si potrebbe fare?

Ultima modifica di cn73 : 18-03-2004 alle 14:24.
cn73 è offline   Rispondi citando il messaggio o parte di esso
Old 18-03-2004, 14:29   #2
Frank1962
Senior Member
 
L'Avatar di Frank1962
 
Iscritto dal: Sep 2001
Città: de_legato
Messaggi: 792
creare una classe estendendo quella dell'JFileChooser ridefinendo così il metodo che chiude la finestra?
__________________
----------------------------------------------
File reality.sys corrupted, Reboot Universe? Y/N
----------------------------------------------
Frank1962 è offline   Rispondi citando il messaggio o parte di esso
Old 18-03-2004, 14:37   #3
cn73
Senior Member
 
L'Avatar di cn73
 
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
Si certo, ma il fatto è che non trovo i riferimenti a questo metodo! Il mmetodo con cui su apre quella che presumo sia una JDialog è
showDialog(Component parent, String approveButtonText) della classe jFileChooser...
cn73 è offline   Rispondi citando il messaggio o parte di esso
Old 18-03-2004, 14:59   #4
Frank1962
Senior Member
 
L'Avatar di Frank1962
 
Iscritto dal: Sep 2001
Città: de_legato
Messaggi: 792
dovresti andare a vedere nel file scr zippato che si trova nella j2sdk il file java che si riferisce alla classe jfilechooser e vedere dove sta quello che ti interessa .........da qualche parte sicuro si troverà, magari scopri che quelli della sun hanno esteso la classe JFrame per creare quella dell'jfilechooser quindi in pratica forse il metodo che gestische la chiusura è quello della classe JFrame.
__________________
----------------------------------------------
File reality.sys corrupted, Reboot Universe? Y/N
----------------------------------------------
Frank1962 è offline   Rispondi citando il messaggio o parte di esso
Old 18-03-2004, 15:04   #5
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
La finestrella è creata "on the fly", per rimaneggiarla devi creare una sottoclasse e appoggiarti ai metodi che, gentilmente, il team Swing ci ha passato. Fortunatamente è una cosa nemmeno troppo invasiva:

Codice:
import java.awt.*;
import javax.swing.*;

public class Applicazione {
	public static void main(String[] a) {
		new Applicazione();
	}
	
	public Applicazione() {
		JFileChooser chooser = new MyChooser();
		chooser.showOpenDialog(null);
	}
	
  class MyChooser extends JFileChooser {
	  protected JDialog createDialog(Component parent) {
		  JDialog d = super.createDialog(parent);
		  d.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
		  return d;
	  }
  }
}
PGI è offline   Rispondi citando il messaggio o parte di esso
Old 18-03-2004, 15:14   #6
cn73
Senior Member
 
L'Avatar di cn73
 
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
Nella mia versione di Swing non esiste il metodo createDialog
cn73 è offline   Rispondi citando il messaggio o parte di esso
Old 18-03-2004, 15:35   #7
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
In effetti è un 1.4 o sup.

Mi raccomando, che non ti capiti mai di avere a disposizione un runtime aggiornato!

recupero una documentazione 1.3 e ti so dire.
PGI è offline   Rispondi citando il messaggio o parte di esso
Old 18-03-2004, 15:44   #8
cn73
Senior Member
 
L'Avatar di cn73
 
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
Recuperala pure 1.2
cn73 è offline   Rispondi citando il messaggio o parte di esso
Old 18-03-2004, 16:11   #9
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
Beh, è già un passo avanti rispetto alla 1.1.8! .

Non ho trovato "trucchi" nella documentazione precedente. Ci sono mille modi per farlo lo stesso, ma il problema che ci vedo io è farlo in un modo che sia meno invasivo possibile per il codice che hai già. La sottoclasse di prima ti consentiva semplicemente di sostituire una riga di codice e aggiungere la nuova "sottoclasse", perchè il metodo "createDialog" è quello usato dalla 1.4 in su per creare tutte le JDialog di JFileChooser.showDialog.

Direi che devi trovare la soluzione che ti sembra più comoda: fai una sottoclasse di JFileChooser e ridefinisci il metodo showOpenDialog costruendo una tua JDialog oppure inserisci nel codice della tua applicazione un metodo "alternativo" per rendere visibile il JFileChooser (che è pur sempre un JComponent). Per questa seconda opzione, si può ricordare il metodo "addActionListener()" di JFileChooser, che viene "connesso" a tutti i componenti "azionabili" presenti nel filechooser.

Ad esempio:

Codice:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Applicazione implements ActionListener {
	public static void main(String[] a) {
		new Applicazione();
	}
	
	JFileChooser fileChooser = new JFileChooser();
	JDialog chooserDialog = new JDialog();
	String dialogAnswer = null;
	
	public Applicazione() {
		fileChooser.addActionListener(this);
		String answer = showOpenDialog(fileChooser);
		if(answer == JFileChooser.APPROVE_SELECTION) {
			System.out.println(fileChooser.getSelectedFile());
		}
		System.exit(0);
	}
	
	public String showOpenDialog(JFileChooser chooser) {
		chooser.setDialogType(JFileChooser.OPEN_DIALOG);
		String title = chooser.getDialogTitle();
		if(title == null) {
			title = "Apri";
		}
		chooserDialog.setTitle(title);
		chooserDialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
		chooserDialog.setModal(true);
		chooserDialog.setContentPane(fileChooser);
		chooserDialog.pack();
		chooserDialog.setVisible(true);
		return dialogAnswer;
	}
	
	public void actionPerformed(ActionEvent e) {
		dialogAnswer = e.getActionCommand();
		chooserDialog.setVisible(false);
	}
	
}
Qui si tratta di riflettere nella finestrella "custom" tutte quelle modifiche che possono essere apportate nel corso del codice al filechooser. Nella classe qui sopra, ad esempio, se ad un certo punto imposti la proprietà "titolo della finestra di dialogo" usando il metodo "setDialogTitle()" devi poi essere in grado di riflettere quella modifica nella tua versione, cosa che è stata fatta definendo come titolo della JDialog "getDialogTitle()" a meno che questo non sia "null"
PGI è offline   Rispondi citando il messaggio o parte di esso
Old 18-03-2004, 16:16   #10
cn73
Senior Member
 
L'Avatar di cn73
 
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
mmm non so...troppo dispendioso e complicato, senza contare che il mio FileChooser è molto complesso, ha una sua FileSystemView, un suo FileChooserUI, un accessorio per la ricerca...
cn73 è offline   Rispondi citando il messaggio o parte di esso
Old 18-03-2004, 16:59   #11
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
Devi considerare che il metodo showOpenDialog di default altro non fa che costruire una finestra di dialogo intorno al componente JFileDialog. A te interessa solo "catturare" quelle modifiche che ineriscono la finestra di dialogo, cioè il titolo e l'eventuale comportamento quando la finestra viene chiusa senza aver scelto alcunchè. In teoria se al metodo qui sopra passi la tua versione di JFileChooser non dovresti notare alcun cambiamento. Poi, naturalmente, vedi tu come gestire la faccenda.
PGI è offline   Rispondi citando il messaggio o parte di esso
Old 18-03-2004, 19:48   #12
cn73
Senior Member
 
L'Avatar di cn73
 
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
Scusami ma la Dialog devo costruirla da 0!
cn73 è offline   Rispondi citando il messaggio o parte di esso
Old 18-03-2004, 20:36   #13
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
C'è qualcosa che mi sfugge in quest'ultima affermazione...

JFileChooser fileChooser = new JFileChooser();
JDialog dialog = new JDialog();
dialog.getContentPane().add(fileChooser);
dialog.pack();
dialog.show().

questa è la stessa GUI di

fileChooser.showOpenDialog(...), salvo il titolo, ma solo quello.

Una JDialog è un quadrato con un titolo e un bottone, non è che ci sia molto da costruire. IL contenuto ce l'hai già (JFileChooser è un JComponent), è come giocare con i lego
PGI è offline   Rispondi citando il messaggio o parte di esso
Old 19-03-2004, 08:59   #14
cn73
Senior Member
 
L'Avatar di cn73
 
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
Non avevo colto la tua affermazione...Grazie PGI metto in pratica e torno
cn73 è offline   Rispondi citando il messaggio o parte di esso
Old 19-03-2004, 11:01   #15
cn73
Senior Member
 
L'Avatar di cn73
 
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
Ok funziona... ho fatto implementare ActionListener alla mia classe che estende JFileChooser e poi ho ridefinitoil metodo:
Codice:
public int showDialog(Component parent, String approveButtonText) {
  setDialogType(JFileChooser.OPEN_DIALOG);
  String title = getDialogTitle();
  setApproveButtonText(approveButtonText);
  chooserDialog= new JDialog((JFrame)parent);
  addActionListener(this);
  chooserDialog.setTitle(title);
    chooserDialog.setDefaultCloseOperationJDialog.DO_NOTHING_ON_CLOSE);
  chooserDialog.setModal(true);
  chooserDialog.setContentPane(this);
  chooserDialog.pack();
  Point parentPos = parent.getLocation();
  Dimension parentSize = parent.getSize();
    Dimension dialogSize = chooserDialog.getSize();
    if (dialogSize.height > parentSize.height) {
      dialogSize.height = parentSize.height;
    }
    if (dialogSize.width > parentSize.width) {
      dialogSize.width = parentSize.width;
    }
		chooserDialog.setLocation( parentPos.x + ((parentSize.width - dialogSize.width) / 2),
										parentPos.y +  ((parentSize.height - dialogSize.height) / 2));
		chooserDialog.setVisible(true);
		
		return dialogAnswer;
	} 
  
  public void actionPerformed(ActionEvent  e) {
  	System.out.println(e.getActionCommand());
  	if (e.getActionCommand().equals(APPROVE_SELECTION ))
  		dialogAnswer = APPROVE_OPTION;
  	else
  		dialogAnswer = CANCEL_OPTION;
		
		chooserDialog.setVisible(false);
  }
Peccato che si abbia un bruttissimo effetto visivo, i componenti sembrano sovrapposrsi e non riesco ad ovviare!
Immagini allegate
File Type: jpg filechooser.jpg (21.5 KB, 7 visite)
cn73 è offline   Rispondi citando il messaggio o parte di esso
Old 19-03-2004, 15:00   #16
cn73
Senior Member
 
L'Avatar di cn73
 
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
Ho migliorato molto con un bel

setOpaque(true); nel costruttore del FIleChooser

restano delle piccole striscette blu cerco di ovviare con il settaggio del bckground...

risolto con un bel

chooserDialog.getContentPane().setBackground(getComponent(0).getBackground());

Mitico PGI ora la Dialog non è closeable ed è identica alle altre

La versione definitiva:

Codice:
public int showDialog(Component parent, String approveButtonText) {
		
		setApproveButtonText(approveButtonText);
		chooserDialog= new JDialog();
		chooserDialog.setTitle(getDialogTitle());
		chooserDialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
		chooserDialog.setModal(true);
		chooserDialog.setContentPane(this);
		chooserDialog.pack();
		chooserDialog.setLocationRelativeTo(parent);   
		chooserDialog.getContentPane().setBackground(getComponent(0).getBackground()); 
		chooserDialog.setVisible(true);
		
		return dialogAnswer;
	}

Ultima modifica di cn73 : 19-03-2004 alle 15:41.
cn73 è offline   Rispondi citando il messaggio o parte di esso
Old 20-03-2004, 12:23   #17
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
Quote:
chooserDialog.getContentPane().setBackground(getComponent(0).getBackground());
Ecco perchè a me veniva un colore di sfondo diverso. Contavo comunque sul fatto che tu avresti trovao una soluzione anche a quello.

alla prossima.
PGI è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Redmi Watch 6 in prova: lo smartwatch con ampio display da 2000 nit a meno di 100 euro Redmi Watch 6 in prova: lo smartwatch con ampio ...
Mad Catz M.M.O. 7+: lo stesso DNA del R.A.T. 8+ ADV, ma con molti più pulsanti Mad Catz M.M.O. 7+: lo stesso DNA del R.A.T. 8+ ...
Radeon RX 9070 GRE, AMD la porta in tutto il mondo | Recensione Gigabyte Gaming OC Radeon RX 9070 GRE, AMD la porta in tutto il mon...
Reolink OMVI 3i WiFi: videosorveglianza più intelligente e facile da usare Reolink OMVI 3i WiFi: videosorveglianza pi&ugrav...
Recensione Vivo X300 Ultra: fotocamera eccezionale, ma prezzo proibitivo Recensione Vivo X300 Ultra: fotocamera ecceziona...
Windows Update, driver installati a sorp...
Finalmente in offerta DEEBOT T50 PRO OMN...
HONOR lancia Pad X8b: batteria infinita ...
Il data center dell'apocalisse è stato r...
Google DeepMind avverte: "L'AGI è a poch...
TSMC: le nuove fabbriche non soddisferan...
Oggi è un ASUS il portatile gamin...
Addio R8, benvenuta Nuvolari: Audi punta...
Google chiede il via libera per liberare...
Le aziende manipolano Reddit per orient...
Valve conferma l'uscita estiva di Steam ...
HP e Ferrari presentano un esclusivo AI ...
App Store, lo studio di Apple sorprende:...
iPhone 18 Pro e Pro Max, niente effetto ...
E-bike fat Engwe con sconto esclusivo, o...
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: 11:16.


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