Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2004
    Messaggi
    343

    [Java] Finestre personalizzate

    Ciao a tutti, avrei un quesito da sottoporvi. Ho cercato anche in rete ma non ho trovato nulla che potesse aiutarmi.

    Allora, da poche settimane ho imparato a realizzare programmi Java con interfaccia grafica, scrivendo tutto il codice a mano perché così richiede il nostro professore all'esame. Ho sempre usato una finestra, lì disegnavo i vari componenti e qualche volta usavo delle JOptionPane.showMessageDialog o delle JOptionPane.showInputDialog per mostrare messaggi all'utente o richieder l'immisiione di testo.
    Ora però mi è stato chiesto di fare un programma che visualizzi finestre secondarie personalizzate sopra al programma principale, insomma finestre fatte da me e non quelle predefinite...ma non ho idea di come si faccia.....devo forse fare delle classi apposite per ogni finestra? E come le faccio a farle apparire e chiudere?

    Vi ringrazio in anticipo per la risposta, sperando che la mia richiesta risulti sufficientemente chiara.....

    Ste

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Usi JDialog. Puoi fare delle classi per ogni finestra che estendono JDialog e istanziare quelle o istanziare una JDialog vuota e riempirla come facevi per i JFrame. Per mostrarle e chiuderle fai esattamente come i frame.
    Documentazione JDialog

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2004
    Messaggi
    343
    Ah, penso di aver capito......
    Farò delle prove, se ho problemi magari chiedo ancora qui sul forum....
    Grazie mille per la risposta, spero di poter ricambiare prima o poi.....
    Ciao!

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2004
    Messaggi
    343
    Ciao, rieccomi qui!
    Ho bisogno ancora del vostro prezioso aiuto.....
    Allora ho lavorato un po' con la JDialog....Ho più o meno ottenuto quello che intendevo, anche se avrei due problemi.

    Prima di porvi le due domande, vi posto il codice di un banale e semplice programmino che ho sfornato stasera in una mezzoretta; si tratta di una JFrame (finestraprincipale.java) con un pulsante, alla pressione del quale viene mostrata una finestra JDialog (finestrasecondaria.java) con un pulsante "Chiudi".
    Ecco il codice:

    file finestraprincipale.java
    codice:
    package provafinestra;
    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    
    public class finestraprincipale extends JFrame {
    private Container a;
    private JButton b;
    
    	public finestraprincipale(){
    		this.setSize(300, 100);
    		this.setTitle("Finestra Principale");
    		Container a = getContentPane();
    		a.setLayout(new FlowLayout());
    		b=new JButton("Apri finestra");
    		a.add(b);
    		GestoreEventi gestore = new GestoreEventi();
    		b.addActionListener(gestore);
    	}
    	private class GestoreEventi implements ActionListener
    	{
    		public void actionPerformed(ActionEvent event)
    		{
    			if ((event.getSource()== b) )
    			{
    				finestrasecondaria n= new finestrasecondaria();
    				n.setSize(200, 200);
    				n.setResizable(false);
    				n.setTitle("Questa è una finestra secondaria");
    				n.requestFocusInWindow();
    				n.setVisible(true);
    			}
    		}
    	}
    	public static void main (String[] args){
    		finestraprincipale frame = new finestraprincipale();
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		frame.setVisible(true);
    		frame.setResizable(false);
    	}
    }
    file finestrasecondaria.java

    codice:
    package provafinestra;
    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;
    import javax.swing.BorderFactory;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    
    public class finestrasecondaria extends JDialog {
    	private Container a;
    	private JButton b;
    	
    	public finestrasecondaria(){
    		Container a = getContentPane();
    		a.setLayout(new FlowLayout());
    		b=new JButton("Chiudi finestra");
    		a.add(b);
    		GestoreEventi gestore = new GestoreEventi();
    		b.addActionListener(gestore);
    	}
    	private class GestoreEventi implements ActionListener
    	{
    		public void actionPerformed(ActionEvent event)
    		{
    			if ((event.getSource()== b) )
    			{
    				System.exit(0);
    			}
    		}
    		
    	}
    
    }
    Ora, questo codice funziona, però la JDialog che appare (finestrasecondaria) non risulta a scelta obbligatoria (l'utente può cioè passare alla JFrame sottostante...)...Se volessi non permettere ciò, come devo fare?
    Altra domanda: se metto un pulsante "Chiudi" sulla JDialog, quale istruzione devo usare per far chiudere solo la JDialog alla pressione di tale pulsante? (nell'esempio che ho postato alla pressione del tasto Chiudi termina tutto il programma......)
    Grazie in anticipo!
    Ste

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Devi sovrascrivere l'altro costruttore, quello che accetta la finestra principale e il flag booleano che indica se la JDialog e' modale o no(in realta'basta il primo se presupponi che la finestra possa essere solo modale), poi alla prima riga chiami il costruttore della superclasse.
    codice:
    package provafinestra;
    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    public class finestrasecondaria extends JDialog {
    	private Container a;
    	private JButton b;
    	
    	public finestrasecondaria(JFrame owner, boolean modal){
                    super(owner, modal);
    		Container a = getContentPane();
    		//Eccetera
    L'altra classe la modifichi quando crei la finestra secondaria
    codice:
    finestrasecondaria n= new finestrasecondaria(this, true);
    Per la seconda domanda, a meno che non hai un buon motivo per forzare l'arresto di tutti i thread, usa il metodo dispose() sia per JFrame che per JDialog.

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2004
    Messaggi
    343
    Perfetto, a parte una piccola modifica che ho dovuto apportare al codice, ora è tutto ok.
    Grazie mille, sei stato gentilissimo!
    Ciao!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.