Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.awt.*;
- import java.awt.event.*;
- import javax.swing.*;
- import java.util.*;
- class ProvaGUIDinamica extends JFrame {
- // ------------------------- Dichiaro i componenti grafici ----------------------------------
- private JTabbedPane tab;
- private JTextField campo1,campo2;
- private JMenu file;
- private JMenuItem nuovo,new_tab,modifica,remove_tab;
- private JPanel pannello;
- private GridLayout gl;
- // ------------------------- Fine dei componenti grafici ------------------------------------
- // Riferimento alla classe corrente; faccio questo poiche' utilizzo il
- // riferimento in una inner class.
- private ProvaGUIDinamica pgd = this;
- // Contiene l'elenco degli elementi Pannello che inserisco (uno per ogni tabbed)
- private LinkedList<Pannello> elenco_panel = new LinkedList<Pannello>();
- ProvaGUIDinamica() {
- // titolo finestra
- super("Prova GUI Dinamica");
- Pannello pannello = new Pannello();
- tab = new JTabbedPane();
- tab.addTab("Primo",pannello);
- // Aggiungo il primo Pannello all'elenco..
- elenco_panel.add(pannello);
- // ..e lo aggiungo al tabbed
- tab.addTab("Primo",pannello);
- // --------------- Creazione del Menu ------------------------------------------------------
- JMenuBar barra = new JMenuBar();
- setJMenuBar(barra);
- file = new JMenu("File");
- nuovo = new JMenuItem("Campo di Testo");
- modifica = new JMenuItem("Modifica Etichetta");
- new_tab = new JMenuItem("Nuova Tab");
- remove_tab = new JMenuItem("Rimuovi Tab");
- remove_tab.setToolTipText("Rimuovi la tab all'indice selezionato");
- file.add(nuovo);
- file.add(modifica);
- file.addSeparator();
- file.add(new_tab);
- file.add(remove_tab);
- barra.add(file);
- // ---------------------------- Fine del Menu ---------------------------------------------
- getContentPane().add(tab, BorderLayout.CENTER);
- // --------------------------- Gestisco il click sul menu ------------------------------
- // Aggiunge un nuovo campo di testo e una nuova etichetta con il nome scelto
- nuovo.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent ae) {
- // Dialog che permette la scelta del nome
- CreaDialogo cd = new CreaDialogo(pgd);
- cd.setSize(200,150);
- cd.setVisible(true);
- if(cd.getTitolo() != null) {
- Pannello panel = elenco_panel.get(tab.getSelectedIndex());
- GridLayout grid = (GridLayout)panel.getLayout();
- grid.setRows(grid.getRows()+1);
- grid.setColumns(grid.getColumns()+1);
- // Devo instanziare l'oggetto e passarlo ai metodi successivi, per evitare
- // di passare un oggetto ad uno dei campi
- JLabel label = new JLabel(cd.getTitolo());
- panel.add(label);
- panel.add(cd.getCampo());
- panel.addLabel(label);
- panel.setLayout(grid);
- pack();
- }
- }
- });
- // Modifica il nome di un etichetta
- modifica.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent ae) {
- Modifica m = new Modifica(pgd);
- m.setSize(200,150);
- m.setVisible(true);
- if((m.getVecchioTesto()!=null) && (m.getTesto()!=null)) {
- Pannello panel = elenco_panel.get(tab.getSelectedIndex());
- panel.cambiaNome(m.getVecchioTesto(),m.getTesto());
- pack();
- }
- }
- });
- // Aggiunge una nuova Tab
- new_tab.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent ae) {
- AggiungiTab at = new AggiungiTab(pgd);
- at.setSize(200,150);
- at.setVisible(true);
- if(at.getNome() != null) {
- Pannello new_panel = new Pannello();
- tab.addTab(at.getNome(),new_panel);
- elenco_panel.add(new_panel);
- pack();
- }
- }
- });
- // Rimuove la tab selezionata
- remove_tab.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent ae) {
- int index = tab.getSelectedIndex();
- tab.removeTabAt(index);
- }
- });
- // -------------------------------- Fine gestione click menu ------------------------------------------------
- // Chiusura istantanea della finestra alla pressione di X
- setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- }
- public static void makeGUI() {
- ProvaGUIDinamica pgd = new ProvaGUIDinamica();
- pgd.pack();
- pgd.setVisible(true);
- }
- public static void main(String args[]) {
- try {
- SwingUtilities.invokeAndWait(new Runnable() {
- public void run() {
- makeGUI();
- }
- });
- } catch(Exception ex) {}
- }
- }
- // Semplice dialog che si ocupa dell'inserimento di un nuovo campo
- // leggendone solo il nome
- class CreaDialogo extends JDialog {
- private int campo;
- private String titolo;
- private JTextField nome;
- private JLabel etichetta;
- private JButton invia;
- CreaDialogo(ProvaGUIDinamica pgd) {
- super(pgd,"Aggiungi Campo",true);
- this.campo = campo;
- this.titolo = titolo;
- nome = new JTextField(10);
- etichetta = new JLabel("Nome Campo: ");
- invia = new JButton("Conferma");
- JPanel pannello = new JPanel(new FlowLayout());
- pannello.add(etichetta);
- pannello.add(nome);
- pannello.add(invia);
- add(pannello);
- invia.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent ae) {
- titolo = nome.getText();
- setTitolo(titolo);
- // Chiudo il dialog
- dispose();
- }
- });
- }
- /**
- * @titolo Nome dell'etichetta
- */
- private void setTitolo(String titolo) {
- this.titolo = titolo;
- }
- JTextField getCampo() {
- return new JTextField(10);
- }
- String getTitolo() {
- return titolo;
- }
- }
- // Mostrando una finestra di dialogo permette l'inserimento
- // del nome della nuova Tabbed
- class AggiungiTab extends JDialog {
- private String nome;
- private JTextField nome_campo;
- private JButton invia;
- AggiungiTab(ProvaGUIDinamica pgd) {
- super(pgd,"Aggiungi Tab",true);
- JPanel pannello = new JPanel(new FlowLayout());
- JLabel etichetta = new JLabel("Nome Tab: ");
- nome_campo = new JTextField(10);
- invia = new JButton("Invia");
- pannello.add(etichetta);
- pannello.add(nome_campo);
- pannello.add(invia);
- add(pannello);
- invia.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent ae) {
- setNome(nome_campo.getText());
- dispose();
- }
- });
- }
- private void setNome(String nome) {
- this.nome = nome;
- }
- String getNome() {
- return nome;
- }
- }
- // Classe che mostra una finestra di dialogo incaricata alla
- // "raccolta" del nome dell'etichetta da rimuovere e del nome
- // da sostituire.
- class Modifica extends JDialog {
- private JLabel etichetta;
- private JTextField campo,campo1;
- private JButton invia;
- private String testo;
- Modifica(ProvaGUIDinamica pgd) {
- super(pgd,"Modifica Nome Campo",true);
- etichetta = new JLabel("Nuovo Nome: ");
- campo = new JTextField(10);
- JLabel label1 = new JLabel("Vecchio Nome: ");
- campo1 = new JTextField(10);
- invia = new JButton("Invia");
- JPanel panel = new JPanel(new FlowLayout());
- panel.add(etichetta);
- panel.add(campo);
- panel.add(label1);
- panel.add(campo1);
- panel.add(invia);
- add(panel);
- invia.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent ae) {
- setTesto(campo.getText());
- dispose();
- }
- });
- }
- private void setTesto(String testo) {
- this.testo = testo;
- }
- String getTesto() {
- return testo;
- }
- String getVecchioTesto() {
- return campo1.getText();
- }
- }
- // Classe che estende JPanel e si occupa dell'incapsulamento delle
- // label in essa.
- class Pannello extends JPanel {
- private JTextField campo;
- // memorizza le etichette del pannello
- private LinkedList<JLabel> elenco_etichette = new LinkedList<JLabel>();
- Pannello() {
- super(new GridLayout(1,1));
- JLabel etichetta = new JLabel("Campo1:");
- campo = new JTextField(10);
- elenco_etichette.add(etichetta);
- add(etichetta);
- add(campo);
- }
- void addLabel(JLabel label) {
- elenco_etichette.add(label);
- }
- /**
- * @vecchio Testo della Label da rimuovere
- * @Nuovo Testo della nuova label da inserire
- */
- void cambiaNome(String vecchio, String nuovo) {
- for(JLabel label :elenco_etichette) {
- if(label.getText().equals(vecchio)) {
- label.setText(nuovo);
- break;
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement