Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    107

    JTable non visualizzato

    Ciao ho scritto questo codice:

    public class nameTable extends JFrame{

    public void nameTable(){
    java.awt.Container c = getContentPane();
    c.setLayout(new GridLayout(1,0));

    final String[] columnNames = {"UserName",

    "Time",};


    final Object[][] data = {
    {"+name+", new Integer(5), new Boolean(false)},
    {"+name+", new Integer(3), new Boolean(true)},
    {"+name+", new Integer(2), new Boolean(false)},
    {"+name+", new Integer(20), new Boolean(true)},
    {"+name+", new Integer(10), new Boolean(false)}
    };

    final JTable table = new JTable(data, columnNames);
    table.setPreferredScrollableViewportSize(new Dimension(500, 100));
    table.setFillsViewportHeight(true);

    table.setSelectionMode(ListSelectionModel.SINGLE_S ELECTION);



    int numRows = table.getRowCount();
    int numCols = table.getColumnCount();
    javax.swing.table.TableModel model = table.getModel();

    System.out.println("Value of data: ");
    for (int i=0; i < numRows; i++) {
    System.out.print(" row " + i + ":");
    for (int j=0; j < numCols; j++) {
    System.out.print(" " + model.getValueAt(i, j));
    }
    System.out.println();
    }
    System.out.println("--------------------------");

    c.add(table);
    nameTable ContentPane = new nameTable();
    c.add(ContentPane);
    setBackground(Color.yellow);
    setForeground(Color.blue);
    setSize(width,height);
    setVisible( true );

    }

    }

    1)Mi crea la finestra ma non mi visualizza la tabella come mai?

    2) ho scritto questo pezzo di codice:

    public void nome(){

    name=JOptionPane.showInputDialog("Inserisci nome utente");

    if (name!=null){
    JOptionPane.showMessageDialog(null, "Devi inserire un nome utente", "alert", JOptionPane.ERROR_MESSAGE);
    name=JOptionPane.showInputDialog("Inserisci nome utente");
    }
    else { JOptionPane.showMessageDialog(null, "Devi inserire un nome utente", "alert", JOptionPane.ERROR_MESSAGE);
    name=JOptionPane.showInputDialog("Inserisci nome utente");
    }
    }

    Questo mi permette di chiedere all'utente di inserire un nome, ma vorrei gestire meglio di quanto ho fatto i pulsanti ok,cancel con l'if che ho fatto se non viene inserito un nome utente sia che si prema il tasto ok che cancel mi chiede di inserire un nome utente e va bene, ma la prima volta che inserisco il nome utente mi da l'error message e mi chiede di riscriverlo.

    3) vorrei che il nome utente venisse memorizzato e poi visualizzato all'interno della mia tabella insieme al tempo,che sarebbe il tempo di gioco dell'utente.

    Grazie per l'aiuto

    Marshall

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328

    Moderazione

    Ti invito ad utilizzare i tag [*CODE] e [*/CODE] (senza l'asterisco rosso) per postare il codice, così da mantenere l'indentazione e renderlo più leggibile.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    107
    Ok, lo farò, consigli???

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    41
    io non sono affatto esperta anzi non ne so quasi nulla, quindi ho un po' di timore a rispondere, nn vorrei parlare troppo a casaccio ;-) però dato che nessuno ti ha risposto lo provo a fare....
    vedo che il setVisible non lo fai sull'oggetto (probabilmente lo fai perché si può fare così), hai provato a fare tabella.setVisible(true)? oppure mettere la tabella in uno jScrollPane? IO uso il GUI builder di netbeans e noto che qualche caratteristica della tabella non la gestisce bene se non è in uno scrollPane...

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Inanzitutto ti invito a seguire il consiglio si sharim. Sempre meglio mettere le tabelle in un JScollPane in modo da poter vedere gli header delle colonne, da poter scorrere il pannello nel caso la tabella fosse piu' grossa delpannello, ecc.
    Il problema di non visualizzazione della tabella e' dovuto al fatto che di default il contentPane di un JFrame ha un BorderLayout. Un BorderLayout e' caratterizzato dall avere 5 settori(NORTH, SOUTH, WEST, EAST e CENTER) nel quale inserire i vari componenti. Una chiamata al metodo add senza specificare il settore causa l'inserimento del componente passato coma parametro nella parte centrale (mi pare). Ora, in ogni settore puoi aggiungere un solo componente, ogni succesiva chiamata del metodo add fa si che venga mostrato nel settore specificato l'ultimo componente aggiunto. Facendo
    codice:
    c.add(table);
    nameTable ContentPane = new nameTable();
    c.add(ContentPane);
    fai si che venga mostrato solo l'oggetto di tipo nameTable() e non vedi piu' table.

    Per il punto 2 e' ovvio che te lo richieda, sia se il nome e' null che non lo e' rivisualizzi la finestra di dialogo. Devi visualizzarla solo se il nome e' null (al max stringa vuota). Meglio mettere tutto in un while cosi se l'utente non scrive il nome nemmeno la seconda volta, continua a chiederlo.
    codice:
    public void nome(){
       name=JOptionPane.showInputDialog("Inserisci nome utente");
       while(name==null||name.equals("")){
          JOptionPane.showMessageDialog(null, "Devi inserire un nome utente", "alert", JOptionPane.ERROR_MESSAGE);
          name=JOptionPane.showInputDialog("Inserisci nome utente");
       }
    }

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    107
    Originariamente inviato da shirim
    io non sono affatto esperta anzi non ne so quasi nulla, quindi ho un po' di timore a rispondere, nn vorrei parlare troppo a casaccio ;-) però dato che nessuno ti ha risposto lo provo a fare....
    vedo che il setVisible non lo fai sull'oggetto (probabilmente lo fai perché si può fare così), hai provato a fare tabella.setVisible(true)? oppure mettere la tabella in uno jScrollPane? IO uso il GUI builder di netbeans e noto che qualche caratteristica della tabella non la gestisce bene se non è in uno scrollPane...

    ho scritto questo codice:

    codice:
    public class nameTable extends JFrame{
          
    
       public void nameTable(){
             java.awt.Container c = getContentPane();
             c.setLayout(new GridLayout(1,0));
    
            final String[] columnNames = {"UserName",
                                          
                                          "Time",};
                                          
                                          
            final Object[][] data = {
                {"+name+", new Integer(5), new Boolean(false)},
                {"+name+", new Integer(3), new Boolean(true)},
                {"+name+", new Integer(2), new Boolean(false)},
                {"+name+", new Integer(20), new Boolean(true)},
                {"+name+", new Integer(10), new Boolean(false)}
            };
                                          
            final JTable table = new JTable(data, columnNames);
            table.setPreferredScrollableViewportSize(new Dimension(500, 100));
            table.setFillsViewportHeight(true);
    
            table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
            JScrollPane scrollPane = new JScrollPane(table);
    
            //Add the scroll pane to this panel.
            add(scrollPane);
                 
                     
            int numRows = table.getRowCount();
            int numCols = table.getColumnCount();
            javax.swing.table.TableModel model = table.getModel();
    
            System.out.println("Value of data: ");
            for (int i=0; i < numRows; i++) {
                System.out.print("    row " + i + ":");
                for (int j=0; j < numCols; j++) {
                    System.out.print("  " + model.getValueAt(i, j));
                }
                System.out.println();
            }
            System.out.println("--------------------------");
            table.setVisible(true); 
            
            c.add(table);
             c.setBackground(Color.yellow);
                  c.setForeground(Color.blue);
                  c.setSize(width,height);
                  c.setVisible( true );
                  
                   //Create and set up the content pane.
            nameTable contentPane = new nameTable();
            c.add(contentPane);
            c.add(nome);
    
    
        
        }         
        
    }
    ma non riesco a visualizzare lo stesso la finestra, come puoi vedere ho applicato anche quello che mi avevi consigliato ma niente..

    questa finestra viene richiamata in un altro metodo in questo modo:

    nome=new nameTable();
    nome.setVisible(true);
    nome.setTitle("Tabella vincitori");
    nome.setSize(width/3,height/3);

    cosa sbaglio?? è molto importante!!!

    grazie

    Marshall

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Ma l'hai letto il mio post sopra?

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    107
    Scusa non avevo visto il tuo post, comunque non riesco ancora a visualizzare la tabella ho inserito questa parte di codice ma niente...

    c.setLayout(new GridLayout(5,2));
    JScrollPane scrollPane = new JScrollPane(table);
    scrollPane.add(table):
    add(scrollPane);
    c.add(scrollPane,BorderLayout.NORTH);
    nameTable contentPane = new nameTable();
    c.add(contentPane);

    Puoi dirmi come scrivere il codice corretto? grazie ancora una volta

    Marshall

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Ad esempio mettendo i due componenti in due zone diverse.
    codice:
    JScrollPane scrollPane = new JScrollPane(table);
    c.add(scrollPane, BorderLayout.CENTER);
    nameTable contentPane = new nameTable();
    c.add(contentPane, BorderLayout.SOUTH);

  10. #10
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    107
    Ciao grazie per la risposta, ho fatto le modifiche che mi hai detto ma niente..
    codice:
     
    public class nameTable extends JFrame{
          
    
       public void nameTable(){
             java.awt.Container c = getContentPane();
             c.setLayout(new GridLayout(5,2));
    
            final String[] columnNames = {"UserName",
                                          
                                          "Time",};
                                          
                                          
            final Object[][] data = {
                {"+name+", new Integer(5), new Boolean(false)},
                {"+name+", new Integer(3), new Boolean(true)},
                {"+name+", new Integer(2), new Boolean(false)},
                {"+name+", new Integer(20), new Boolean(true)},
                {"+name+", new Integer(10), new Boolean(false)}
            };
                                          
            final JTable table = new JTable(data, columnNames);
            table.setPreferredScrollableViewportSize(new Dimension(500, 100));
            table.setFillsViewportHeight(true);
    
            table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
            JScrollPane scrollPane = new JScrollPane(table);
            scrollPane.add(table);
            c.add(scrollPane, BorderLayout.CENTER);
            
                             
            int numRows = table.getRowCount();
            int numCols = table.getColumnCount();
            javax.swing.table.TableModel model = table.getModel();
    
            System.out.println("Value of data: ");
            for (int i=0; i < numRows; i++) {
                System.out.print("    row " + i + ":");
                for (int j=0; j < numCols; j++) {
                    System.out.print("  " + model.getValueAt(i, j));
                }
                System.out.println();
            }
            System.out.println("--------------------------");
            table.setVisible(true); 
            nameTable contentPane = new nameTable();
            c.add(contentPane, BorderLayout.SOUTH);
            c.setBackground(Color.yellow);
            c.setForeground(Color.blue);
            c.setSize(width,height);
            c.setVisible( true );
              
        }         
        
    }
    Non so proprio perchè..

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 © 2026 vBulletin Solutions, Inc. All rights reserved.