Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    63

    Generare un numero di finestre variabile a runtime

    Ciao a tutti,
    vi riporto il codice che di seguito spiego:
    codice:
    private void jButton3ActionPerformed(ActionEvent evt) {
    		for (int i=0; i<jComboBox2.getSelectedIndex(); i++){
    			JFrame frame = new JFrame();
    			Finestra inst = new Finestra(frame);
    			inst.setVisible(true);
    			while (inst.isEnabled()){
    				try {
    					wait();
    				} catch (InterruptedException e) {
    					e.printStackTrace();
    				}
    			}
    			j++;
    		}
    	}
    In pratica voglio che cliccando sul pulsante jButton3 si creino un certo numero di finestre (dato da jComboBox2) che consentano di inserire al loro interno dei dati.
    Però voglio che le finestre si aprano una alla volta. Ovvero: si apre la prima; una volta chiusa si apre la seconda... e così via. Come posso fare?
    Il codice che ho riportato ovviamente non funziona(si apre solo una finestra)... cosa sbaglio?

    Grazie.

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    63
    Nessuno ha qualche suggerimento?

  3. #3
    quello che penso in linea teorica e' che all'evento onclose di una finestra lanci la successiva.

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    JDialog modali. Sono finestre di dialogo che bloccano la finestra principale(anche il flusso di codice) finche' non vengono chiuse. Esempio banale
    codice:
    import java.awt.event.*;
    import javax.swing.*;
    
    public class MultiWindows extends JFrame implements ActionListener{
        private JButton bottone;
        private JPanel pannello;
        
        public MultiWindows() {
            super("Test");
            bottone = new JButton("click");
            bottone.addActionListener(this);
            pannello = new JPanel();
            pannello.add(bottone);
            this.setContentPane(pannello);
            this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            this.setSize(200,200);
            this.setVisible(true);
            
        }
        
        public void actionPerformed(ActionEvent e) {
            for(int i = 0; i<3; i++){
                JDialog dialogo = new JDialog(this, true);
                JLabel label = new JLabel("Finestra n° "+i);
                dialogo.add(label);
                //apro in punti diversi per far vedere che si apre quando chiudo la precedente
                dialogo.setLocation(i*100,i*100);
                dialogo.pack();
                dialogo.setVisible(true);
            }
        }
        
        public static void main(String[] args) {
            new MultiWindows();
        }
    }

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    63
    Innanzitutto Simo grazie mille per l'aiuto... l'effetto è esattamente quello voluto, ma c'è un piccolo problemino che non riesco a risolvere vista la mia ignoranza in java in generale e ancor di più nella creazione di interfacce grafiche.
    La JDialog che si crea come faccio a personalizzarla a piacere?

    Nell'esempio che ho riportato veniva chiamata una classe che costituiva un nuovo pannello grafico indipendente mentre con la tua tecnica viene creata questa JDialog all'interno della mia classe.
    Non c'è modo di far sì che venga richiamata un'altra interfaccia?

    Potranno essere domande banalissime, lo so, ma sono ai primissimi passi! Grazie ancora!

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Crei una classe che estende JDialog. Ci metti i costruttori che t'interessano (e dalla prima riga di ogni costruttore chiami quello della superclasse), poi nei costruttori personalizzi come vuoi.
    Esempio
    codice:
    public class MyDialog extends JDialog implements ActionListener {
        private JPanel pannello;
        private JLabel label;
        private JButton bottone;
        
        public MyDialog(JFrame owner, boolean modal) {
            super(owner, modal);
            pannello = new JPanel();
            pannello.setBackground(Color.RED);
            label = new JLabel("Simo");
            label.setOpaque(false);
            bottone = new JButton("Click");
            bottone.addActionListener(this);
            pannello.setLayout(new GridLayout(2,1));
            pannello.add(label);
            pannello.add(bottone);
            this.setContentPane(pannello);
            this.pack();
            this.setVisible(true);
        }
    
        public void actionPerformed(ActionEvent e) {
            int n = (int)(Math.random()*256);
            label.setText(""+n);
        }
        
    }
    Poi richiami MyDialog invece che JDialog.
    codice:
    public void actionPerformed(ActionEvent e) {
            for(int i = 0; i<3; i++){
                MyDialog dialogo = new MyDialog(this, true);
            }
    }

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.