Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di wino_7
    Registrato dal
    Dec 2006
    Messaggi
    537

    [Java/Swing] Problema con refresh UI

    Salve a tutti è da poco che smanetto con Swing/AWT ed ora ho un problema, praticamente cliccando su un pulsante apro un JDialog tramite il quale prendo l'input dell'utente.
    Una volta che l'utente ha inserito i dati nel JDialog clicca su un pulsante "Aggiungi", a questo punto voglio poter effettuare un refresh del JFrame principale con tutti i componenti in esso contenuti.

    Nel JFrame principale ho un metodo pubblico che mi torna un riferimento al JFrame stesso, a questo punto ho pensato che tramite il riferimento mi bastesse fare una cosa del genere.

    Codice PHP:
    Assistant frame Assistant.getinstance();
    frame.updateUI(); 
    Dove Assistant il nome della classe dove è contenuto il main.

    Però non si aggiorna nulla, come posso fare ?????

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Sarebbe bene postare il codice per intero

    Tuttavia, io andrei subito su un pack();
    Ovviamente deve deve essere fatto su quel frame, e non su un altro oggetto..

    ti basta quindi:
    codice:
    frame.pack();
    http://download-llnw.oracle.com/java...tml#pack%28%29

  3. #3
    Utente di HTML.it L'avatar di wino_7
    Registrato dal
    Dec 2006
    Messaggi
    537
    Purtroppo non mi fuziona così.

    Ti posto il codice :
    Codice PHP:
    package GUI;

    import EventHandler.MyMenuHandler;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import java.awt.GridLayout;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    import javax.swing.table.DefaultTableModel;
    import javax.swing.table.TableModel;

    public class 
    Assistant extends JPanel {

        private static 
    JFrame frame;
        private static 
    Assistant instance null;  // E' il componente JPanel
        
    private JScrollPane scrollPane;
        private 
    JTable table;
        private 
    DefaultTableModel tableModel;

        
    // <editor-fold defaultstate="collapsed" desc="Costruttore : private Assistant()">
        
    private Assistant() {

            
    super(new GridLayout(10));

            
    tableModel = new MyTableModel();
            
    table = new JTable();
            
    table.setModel(tableModel);

            
    // Applico l'editor e il render personalizzati
            
    table.getColumn("Modifica").setCellRenderer(new PanelRender());
            
    table.getColumn("Modifica").setCellEditor(new PanelEditor());
            
    table.getColumn("Cancella").setCellRenderer(new PanelRender());
            
    table.getColumn("Cancella").setCellEditor(new PanelEditor());
            
    table.setRowHeight(40); // Metto un altezza che mi consente di vedere tutto il bottone

            // Creo il pannello a scorrimento e ci inserisco la JTable
            
    scrollPane = new JScrollPane(table);
            
    add(scrollPane);
        }
    // </editor-fold>

        // <editor-fold defaultstate="collapsed" desc="Method : void createAndShowGUI()">
        
    private static void createAndShowGUI() {

            
    // Creazione della finestra e settaggio opzioni.
            
    frame = new JFrame("Assistant");
            
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

            
    // <editor-fold defaultstate="collapsed" desc="Creazione del Menu e eventi sui pulsanti">
            
    JMenuBar menuBar = new JMenuBar();
            
    frame.setJMenuBar(menuBar);

            
    // Creazione dei menu a discesa
            
    JMenu fileMenu = new JMenu("File");
            
    JMenu optionMenu = new JMenu("Appuntamento");
            
    JMenu strumentiMenu = new JMenu("Strumenti");

            
    menuBar.add(fileMenu);
            
    menuBar.add(optionMenu);
            
    menuBar.add(strumentiMenu);

            
    // Creazione delle voci del menu a discesa File
            
    JMenuItem exitAction = new JMenuItem("Esci");

            
    fileMenu.add(exitAction);

            
    // Creazione delle voci del menu a discesa Option
            
    JMenuItem addAction = new JMenuItem("Aggiungi");
            
    JMenuItem modAction = new JMenuItem("Modifica");

            
    optionMenu.add(addAction);
            
    optionMenu.add(modAction);

            
    // Creazione delle voci del menu a discesa Strumenti
            
    JMenuItem cercaDataAction = new JMenuItem("Cerca per data");
            
    JMenuItem cercaNomeAction = new JMenuItem("Cerca per nome");

            
    strumentiMenu.add(cercaDataAction);
            
    strumentiMenu.add(cercaNomeAction);



            
    // Gestione degli eventi sulle voci del menu
            
    exitAction.addActionListener(new MyMenuHandler());
            
    addAction.addActionListener(new MyMenuHandler());
            
    modAction.addActionListener(new MyMenuHandler());
            
    cercaDataAction.addActionListener(new MyMenuHandler());
            
    cercaNomeAction.addActionListener(new MyMenuHandler());

            
    // </editor-fold>

            
    Assistant newContentPane = new Assistant();
            
    newContentPane.setOpaque(true);
            
    frame.setContentPane(newContentPane);  // Aggiungo il pannello al JFrame

            // Visualizzo JFrame con il componente JPane
            
    frame.pack();
            
    frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
            
    frame.setVisible(true);
        }
    // </editor-fold>

        // <editor-fold defaultstate="collapsed" desc="Method : JFrame getJFrame()">
        
    public JFrame getJFrame() {
            return 
    Assistant.frame;
        }
    // </editor-fold>

        // <editor-fold defaultstate="collapsed" desc="Method : Assistant getInstance()">
        
    public synchronized static Assistant getInstance() {
            if (
    instance == null) {
                
    instance = new Assistant();
            }
            return 
    instance;
        }
    // </editor-fold>

        // <editor-fold defaultstate="collapsed" desc="Method : JScrollPane getJScrollPane()">
        
    public JScrollPane getJScrollPane() {
            return 
    this.scrollPane;
        }
    // </editor-fold>

        // <editor-fold defaultstate="collapsed" desc="Method : JTable getJTable()">
        
    public JTable getJTable() {
            return 
    this.table;
        }
    // </editor-fold>

        // <editor-fold defaultstate="collapsed" desc="Method : TableModel getJTableModel()">
        
    public TableModel getJTableModel() {
            return 
    this.tableModel;
        }
    // </editor-fold>

        // <editor-fold defaultstate="collapsed" desc="Main()">
        
    public static void main(String[] args) {

            
    javax.swing.SwingUtilities.invokeLater(new Runnable() {

                public 
    void run() {
                    
    createAndShowGUI();
                }
            });

        }
    // </editor-fold>


    Codice PHP:
    package GUI;

    import javax.swing.JFrame;
    import javax.swing.event.TableModelEvent;
    import javax.swing.event.TableModelListener;
    import javax.swing.table.DefaultTableModel;
    import support.DataAccess;

    public class 
    MyTableModel extends DefaultTableModel implements TableModelListener {

        private 
    DataAccess da DataAccess.getInstance();

        public 
    MyTableModel(){

            
    Object[] tableHeaders da.getTableHeaders();
            
    Object[][] tableData da.getDataTable(da.getListAppuntamenti());

            
    setDataVector(tableDatatableHeaders);
            
    addTableModelListener(this);
            
        }

        public 
    void tableChanged(TableModelEvent e) {
            
    System.out.println("Riga rimossa");
            
    // Ma il realtà sul video la tabella è invariata
        
    }


    Codice PHP:
     

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Generalmente si estende JFrame con al suo interno un JPanel, e non il contrario.

    Non vedo in che punto rimuovi la riga..
    Inoltre sarebbe stato meglio estendere AbstractTableModel ed implementare i vai metodi getter e setter, successivamente andrai ad implementare anche quelli di cui hai bisogno.

    http://download.oracle.com/javase/tu...able.html#data

    La tabella la aggiungi sul frame, ma il frame viene esposto dal pannello...quindi..

    Ricordati che la riga deve essere rimossa tramite il model della tabella con removeRow();

    Guarda pure qui:

    http://download.oracle.com/javase/tu...able.html#fire

    Inoltre, per ascoltare sulla tabella potresti fare:
    codice:
    tabella.getModel().addTableModelListener(new TableModelListener() {
      public void tableChanged(TableModelEvent tme) {
        // Codice
      }
    });

  5. #5
    Utente di HTML.it L'avatar di wino_7
    Registrato dal
    Dec 2006
    Messaggi
    537
    Originariamente inviato da Patrick Jane
    Generalmente si estende JFrame con al suo interno un JPanel, e non il contrario.
    Si è vero io estendo JPanel ma se vedi bene poi lo aggancio al JFrame.

    Non vedo in che punto rimuovi la riga..
    La rimuovo qui (ci ho messo una print per vedere il metodo veniva chiamato, in realità prima ci avevo messo la chiamata a removeRow()) :

    codice:
    public void tableChanged(TableModelEvent e) { 
            System.out.println("Riga rimossa"); 
            // Ma il realtà sul video la tabella è invariata 
        }
    Inoltre sarebbe stato meglio estendere AbstractTableModel ed implementare i vai metodi getter e setter, successivamente andrai ad implementare anche quelli di cui hai bisogno.

    http://download.oracle.com/javase/tu...able.html#data

    La tabella la aggiungi sul frame, ma il frame viene esposto dal pannello...quindi..

    Ricordati che la riga deve essere rimossa tramite il model della tabella con removeRow();

    Guarda pure qui:

    http://download.oracle.com/javase/tu...able.html#fire

    Inoltre, per ascoltare sulla tabella potresti fare:
    codice:
    tabella.getModel().addTableModelListener(new TableModelListener() {
      public void tableChanged(TableModelEvent tme) {
        // Codice
      }
    });

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.