Advertisement
Guest User

Untitled

a guest
Jul 5th, 2010
343
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.83 KB | None | 0 0
  1. import java.awt.*;
  2. import java.awt.event.*;
  3. import javax.swing.*;
  4. import java.util.*;
  5.  
  6. class ProvaGUIDinamica extends JFrame {
  7.   // ------------------------- Dichiaro i componenti grafici ----------------------------------
  8.   private JTabbedPane tab;
  9.   private JTextField campo1,campo2;
  10.   private JMenu file;
  11.   private JMenuItem nuovo,new_tab,modifica,remove_tab;
  12.   private JPanel pannello;
  13.   private GridLayout gl;
  14.   // ------------------------- Fine dei componenti grafici ------------------------------------
  15.  
  16.   // Riferimento alla classe corrente; faccio questo poiche' utilizzo il
  17.   // riferimento in una inner class.
  18.   private ProvaGUIDinamica pgd = this;
  19.  
  20.   // Contiene l'elenco degli elementi Pannello che inserisco (uno per ogni tabbed)
  21.   private LinkedList<Pannello> elenco_panel = new LinkedList<Pannello>();
  22.  
  23.   ProvaGUIDinamica() {
  24.     // titolo finestra
  25.     super("Prova GUI Dinamica");
  26.    
  27.     Pannello pannello = new Pannello();
  28.    
  29.     tab = new JTabbedPane();
  30.     tab.addTab("Primo",pannello);
  31.     // Aggiungo il primo Pannello all'elenco..
  32.     elenco_panel.add(pannello);
  33.     // ..e lo aggiungo al tabbed
  34.     tab.addTab("Primo",pannello);
  35.    
  36.     // --------------- Creazione del Menu ------------------------------------------------------
  37.     JMenuBar barra = new JMenuBar();
  38.     setJMenuBar(barra);
  39.     file = new JMenu("File");
  40.     nuovo = new JMenuItem("Campo di Testo");
  41.     modifica = new JMenuItem("Modifica Etichetta");
  42.     new_tab = new JMenuItem("Nuova Tab");
  43.     remove_tab = new JMenuItem("Rimuovi Tab");
  44.     remove_tab.setToolTipText("Rimuovi la tab all'indice selezionato");
  45.    
  46.     file.add(nuovo);
  47.     file.add(modifica);
  48.     file.addSeparator();
  49.     file.add(new_tab);
  50.     file.add(remove_tab);
  51.     barra.add(file);
  52.     // ---------------------------- Fine del Menu ---------------------------------------------
  53.    
  54.     getContentPane().add(tab, BorderLayout.CENTER);
  55.    
  56.     // --------------------------- Gestisco il click sul menu ------------------------------
  57.    
  58.     // Aggiunge un nuovo campo di testo e una nuova etichetta con il nome scelto
  59.     nuovo.addActionListener(new ActionListener() {
  60.       public void actionPerformed(ActionEvent ae) {
  61.         // Dialog che permette la scelta del nome
  62.         CreaDialogo cd = new CreaDialogo(pgd);
  63.         cd.setSize(200,150);
  64.         cd.setVisible(true);
  65.        
  66.         if(cd.getTitolo() != null) {
  67.           Pannello panel = elenco_panel.get(tab.getSelectedIndex());
  68.           GridLayout grid = (GridLayout)panel.getLayout();
  69.        
  70.           grid.setRows(grid.getRows()+1);
  71.           grid.setColumns(grid.getColumns()+1);
  72.        
  73.           // Devo instanziare l'oggetto e passarlo ai metodi successivi, per evitare
  74.           // di passare un oggetto ad uno dei campi
  75.           JLabel label = new JLabel(cd.getTitolo());
  76.           panel.add(label);
  77.           panel.add(cd.getCampo());
  78.           panel.addLabel(label);
  79.        
  80.           panel.setLayout(grid);
  81.          
  82.           pack();
  83.         }
  84.       }
  85.     });
  86.    
  87.     // Modifica il nome di un etichetta
  88.     modifica.addActionListener(new ActionListener() {
  89.       public void actionPerformed(ActionEvent ae) {
  90.         Modifica m = new Modifica(pgd);
  91.         m.setSize(200,150);
  92.         m.setVisible(true);
  93.        
  94.         if((m.getVecchioTesto()!=null) && (m.getTesto()!=null)) {
  95.           Pannello panel = elenco_panel.get(tab.getSelectedIndex());
  96.        
  97.           panel.cambiaNome(m.getVecchioTesto(),m.getTesto());
  98.        
  99.           pack();
  100.         }
  101.       }
  102.     });
  103.    
  104.     // Aggiunge una nuova Tab
  105.     new_tab.addActionListener(new ActionListener() {
  106.       public void actionPerformed(ActionEvent ae) {
  107.         AggiungiTab at = new AggiungiTab(pgd);
  108.         at.setSize(200,150);
  109.         at.setVisible(true);
  110.        
  111.         if(at.getNome() != null) {
  112.           Pannello new_panel = new Pannello();
  113.        
  114.           tab.addTab(at.getNome(),new_panel);
  115.        
  116.           elenco_panel.add(new_panel);
  117.           pack();
  118.         }
  119.       }
  120.     });
  121.    
  122.     // Rimuove la tab selezionata
  123.     remove_tab.addActionListener(new ActionListener() {
  124.       public void actionPerformed(ActionEvent ae) {
  125.         int index = tab.getSelectedIndex();
  126.        
  127.         tab.removeTabAt(index);
  128.       }
  129.     });
  130.    
  131.     // -------------------------------- Fine gestione click menu ------------------------------------------------
  132.    
  133.     // Chiusura istantanea della finestra alla pressione di X
  134.     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  135.   }
  136.  
  137.   public static void makeGUI() {
  138.     ProvaGUIDinamica pgd = new ProvaGUIDinamica();
  139.     pgd.pack();
  140.     pgd.setVisible(true);
  141.   }
  142.  
  143.   public static void main(String args[]) {
  144.     try {
  145.       SwingUtilities.invokeAndWait(new Runnable() {
  146.         public void run() {
  147.           makeGUI();
  148.         }
  149.       });
  150.     } catch(Exception ex) {}
  151.   }
  152. }
  153.  
  154. // Semplice dialog che si ocupa dell'inserimento di un nuovo campo
  155. // leggendone solo il nome
  156. class CreaDialogo extends JDialog {
  157.   private int campo;
  158.   private String titolo;
  159.  
  160.   private JTextField nome;
  161.   private JLabel etichetta;
  162.   private JButton invia;
  163.  
  164.   CreaDialogo(ProvaGUIDinamica pgd) {
  165.     super(pgd,"Aggiungi Campo",true);
  166.    
  167.     this.campo = campo;
  168.     this.titolo = titolo;
  169.    
  170.     nome = new JTextField(10);
  171.     etichetta = new JLabel("Nome Campo: ");
  172.     invia = new JButton("Conferma");
  173.    
  174.     JPanel pannello = new JPanel(new FlowLayout());
  175.     pannello.add(etichetta);
  176.     pannello.add(nome);
  177.     pannello.add(invia);
  178.    
  179.     add(pannello);
  180.    
  181.     invia.addActionListener(new ActionListener() {
  182.       public void actionPerformed(ActionEvent ae) {
  183.         titolo = nome.getText();
  184.         setTitolo(titolo);
  185.        
  186.         // Chiudo il dialog
  187.         dispose();
  188.       }
  189.     });
  190.   }
  191.  
  192.   /**
  193.    * @titolo Nome dell'etichetta
  194.    */
  195.   private void setTitolo(String titolo) {
  196.     this.titolo = titolo;
  197.   }
  198.  
  199.   JTextField getCampo() {
  200.     return new JTextField(10);
  201.   }
  202.  
  203.   String getTitolo() {
  204.     return titolo;
  205.   }
  206. }
  207.  
  208. // Mostrando una finestra di dialogo permette l'inserimento
  209. // del nome della nuova Tabbed
  210. class AggiungiTab extends JDialog {
  211.   private String nome;
  212.  
  213.   private JTextField nome_campo;
  214.   private JButton invia;
  215.  
  216.   AggiungiTab(ProvaGUIDinamica pgd) {
  217.     super(pgd,"Aggiungi Tab",true);
  218.    
  219.     JPanel pannello = new JPanel(new FlowLayout());
  220.     JLabel etichetta = new JLabel("Nome Tab: ");
  221.     nome_campo = new JTextField(10);
  222.     invia = new JButton("Invia");
  223.    
  224.     pannello.add(etichetta);
  225.     pannello.add(nome_campo);
  226.     pannello.add(invia);
  227.    
  228.     add(pannello);
  229.    
  230.     invia.addActionListener(new ActionListener() {
  231.       public void actionPerformed(ActionEvent ae) {
  232.         setNome(nome_campo.getText());
  233.        
  234.         dispose();
  235.       }
  236.     });
  237.   }
  238.  
  239.   private void setNome(String nome) {
  240.     this.nome = nome;
  241.   }
  242.  
  243.   String getNome() {
  244.     return nome;
  245.   }
  246. }
  247.  
  248. // Classe che mostra una finestra di dialogo incaricata alla
  249. // "raccolta" del nome dell'etichetta da rimuovere e del nome
  250. // da sostituire.
  251. class Modifica extends JDialog {
  252.   private JLabel etichetta;
  253.   private JTextField campo,campo1;
  254.   private JButton invia;
  255.  
  256.   private String testo;
  257.  
  258.   Modifica(ProvaGUIDinamica pgd) {
  259.     super(pgd,"Modifica Nome Campo",true);
  260.    
  261.     etichetta = new JLabel("Nuovo Nome: ");
  262.     campo = new JTextField(10);
  263.     JLabel label1 = new JLabel("Vecchio Nome: ");
  264.     campo1 = new JTextField(10);
  265.     invia = new JButton("Invia");
  266.    
  267.     JPanel panel = new JPanel(new FlowLayout());
  268.     panel.add(etichetta);
  269.     panel.add(campo);
  270.     panel.add(label1);
  271.     panel.add(campo1);
  272.     panel.add(invia);
  273.    
  274.     add(panel);
  275.    
  276.    
  277.     invia.addActionListener(new ActionListener() {
  278.       public void actionPerformed(ActionEvent ae) {
  279.         setTesto(campo.getText());
  280.        
  281.         dispose();
  282.       }
  283.     });
  284.   }
  285.  
  286.   private void setTesto(String testo) {
  287.     this.testo = testo;
  288.   }
  289.  
  290.   String getTesto() {
  291.     return testo;
  292.   }
  293.  
  294.   String getVecchioTesto() {
  295.     return campo1.getText();
  296.   }
  297. }
  298.  
  299. // Classe che estende JPanel e si occupa dell'incapsulamento delle
  300. // label in essa.
  301. class Pannello extends JPanel {
  302.   private JTextField campo;
  303.   // memorizza le etichette del pannello
  304.   private LinkedList<JLabel> elenco_etichette = new LinkedList<JLabel>();
  305.  
  306.   Pannello() {
  307.     super(new GridLayout(1,1));
  308.    
  309.     JLabel etichetta = new JLabel("Campo1:");
  310.     campo = new JTextField(10);
  311.    
  312.     elenco_etichette.add(etichetta);
  313.    
  314.     add(etichetta);
  315.     add(campo);
  316.   }
  317.  
  318.   void addLabel(JLabel label) {
  319.     elenco_etichette.add(label);
  320.   }
  321.  
  322.   /**
  323.    * @vecchio Testo della Label da rimuovere
  324.    * @Nuovo Testo della nuova label da inserire
  325.    */
  326.   void cambiaNome(String vecchio, String nuovo) {
  327.     for(JLabel label :elenco_etichette) {
  328.       if(label.getText().equals(vecchio)) {
  329.         label.setText(nuovo);
  330.         break;
  331.       }
  332.     }
  333.   }
  334. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement