Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [JAVA] impossibile modificare un'oggetto in metodo statico

    questo è il mio codice, ancora in fase embrionale, di main.java:

    codice:
    import java.net.*;
    import java.io.*;
    import javax.swing.JOptionPane;
    import java.lang.ArrayIndexOutOfBoundsException;
    import javax.swing.*;
    import java.awt.*;
    import java.awt.image.BufferedImage;
    import javax.imageio.ImageIO;
    import javax.swing.JLabel;
    import javax.swing.table.*;
    
    /*
     * main.java
     * Created on 11-ott-2009, 11.28.21
     */
    
    /**
     * @author 
     */
    public class main extends javax.swing.JFrame {
    
        /** Creates new form main */
        URL URLImmagine;
        ImageIcon imgBandiera;
        public main() {
            //aggiunto da me per testare immagine in jlable1
            try
            {
                URLImmagine = new URL("http://web1.trophymanager.com/flags/it.png");
                imgBandiera = new ImageIcon(URLImmagine);
            }
            catch(MalformedURLException excImm)
            {
                JOptionPane.showMessageDialog(null, excImm.toString());
            }
            // fine aggiunto da me
            initComponents();
        }
    
        /** This method is called from within the constructor to
         * initialize the form.
         * WARNING: Do NOT modify this code. The content of this method is
         * always regenerated by the Form Editor.
         */
        @SuppressWarnings("unchecked")
        // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
        private void initComponents() {
    
            jLabel1 = new javax.swing.JLabel();
            jScrollPane1 = new javax.swing.JScrollPane();
            jTable1 = new javax.swing.JTable();
    
            setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    
            jLabel1.setIcon(imgBandiera);
            jLabel1.setText("jLabel1");
    
            jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
            jTable1.setModel(new javax.swing.table.DefaultTableModel(
                new Object [][] {
                    {"Prova", null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null},
                    {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null},
                    {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null},
                    {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null}
                },
                new String [] {
                    "Nome", "Squadra", "Naz", "Alt", "Pes", "Ruo", "Rou", "Sti", "Stato", "Trasferimento", "For", "Res", "Vel", "Marl", "Con", "Imp", "Pos", "Pas", "Cro", "Tec", "Tes", "Fin", "C.P", "Cancella"
                }
            ) {
                Class[] types = new Class [] {
                    java.lang.String.class, java.lang.String.class, java.lang.Object.class, java.lang.Integer.class, java.lang.Integer.class, java.lang.String.class, java.lang.Float.class, java.lang.Integer.class, java.lang.String.class, java.lang.String.class, java.lang.Integer.class, java.lang.Integer.class, java.lang.Integer.class, java.lang.Integer.class, java.lang.Integer.class, java.lang.Integer.class, java.lang.Integer.class, java.lang.Integer.class, java.lang.Integer.class, java.lang.Integer.class, java.lang.Integer.class, java.lang.Integer.class, java.lang.Integer.class, java.lang.Object.class
                };
                boolean[] canEdit = new boolean [] {
                    false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false
                };
    
                public Class getColumnClass(int columnIndex) {
                    return types [columnIndex];
                }
    
                public boolean isCellEditable(int rowIndex, int columnIndex) {
                    return canEdit [columnIndex];
                }
            });
            jScrollPane1.setViewportView(jTable1);
            jTable1.getColumnModel().getColumn(0).setPreferredWidth(180);
            jTable1.getColumnModel().getColumn(1).setPreferredWidth(150);
            jTable1.getColumnModel().getColumn(2).setPreferredWidth(40);
            jTable1.getColumnModel().getColumn(2).setCellEditor(new PanelEditor());
            jTable1.getColumnModel().getColumn(2).setCellRenderer(new PanelRender());
            jTable1.getColumnModel().getColumn(3).setPreferredWidth(30);
            jTable1.getColumnModel().getColumn(4).setPreferredWidth(40);
            jTable1.getColumnModel().getColumn(5).setPreferredWidth(35);
            jTable1.getColumnModel().getColumn(6).setPreferredWidth(40);
            jTable1.getColumnModel().getColumn(7).setPreferredWidth(50);
            jTable1.getColumnModel().getColumn(8).setPreferredWidth(80);
            jTable1.getColumnModel().getColumn(9).setPreferredWidth(80);
            jTable1.getColumnModel().getColumn(10).setPreferredWidth(30);
            jTable1.getColumnModel().getColumn(11).setPreferredWidth(30);
            jTable1.getColumnModel().getColumn(12).setPreferredWidth(30);
            jTable1.getColumnModel().getColumn(13).setPreferredWidth(30);
            jTable1.getColumnModel().getColumn(14).setPreferredWidth(30);
            jTable1.getColumnModel().getColumn(15).setPreferredWidth(30);
            jTable1.getColumnModel().getColumn(16).setPreferredWidth(30);
            jTable1.getColumnModel().getColumn(17).setPreferredWidth(30);
            jTable1.getColumnModel().getColumn(18).setPreferredWidth(30);
            jTable1.getColumnModel().getColumn(19).setPreferredWidth(30);
            jTable1.getColumnModel().getColumn(20).setPreferredWidth(30);
            jTable1.getColumnModel().getColumn(21).setPreferredWidth(30);
            jTable1.getColumnModel().getColumn(22).setPreferredWidth(30);
            jTable1.getColumnModel().getColumn(23).setPreferredWidth(70);
            jTable1.getColumnModel().getColumn(23).setCellEditor(new PanelEditor());
            jTable1.getColumnModel().getColumn(23).setCellRenderer(new PanelRender());
    
            javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
            getContentPane().setLayout(layout);
            layout.setHorizontalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addContainerGap()
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 617, Short.MAX_VALUE)
                        .addComponent(jLabel1))
                    .addContainerGap())
            );
            layout.setVerticalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addGap(37, 37, 37)
                    .addComponent(jLabel1)
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 309, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
            );
    
            pack();
        }// </editor-fold>//GEN-END:initComponents
    
        /**
        * @param args the command line arguments
        */
        
        public void modTabella()
        {
            jTable1.setModel(new DefaultTableModel());
        }
    
        public static void main(String args[])
        {
            //debug
            Giocatore giocatore1 = new Giocatore("26681189");
            //fine debug
            // estrazione dell'id da url del tipo http://trophymanager.com/showprofile...yerid=00000000
            String id = "";
            try
            {
                String arg = args[0];
                id = arg.substring(49);
            }
            catch(ArrayIndexOutOfBoundsException eccArgs)
            {            
            }
            try
            {
                ServerSocket welcomeSocket = new ServerSocket(8813);
                java.awt.EventQueue.invokeLater(new Runnable()
                {
                    public void run()
                    {
                        new main().setVisible(true);
                    }
                });
                while(true)
                {
                    Socket connectionSocket = welcomeSocket.accept();
    		ObjectInputStream inFromClient = new ObjectInputStream(connectionSocket.getInputStream());
    		connectionSocket.close();
                }
            }
            catch(IOException exc)
            {
                try
                {
                    Socket connectionSocket = new Socket("localhost",8813);
                    ObjectOutputStream outToServer = new ObjectOutputStream(connectionSocket.getOutputStream());
    		outToServer.writeBytes(id+'\n');
    		outToServer.flush();
    		connectionSocket.close();
                }
                catch(IOException excclient)
                {
                    JOptionPane.showMessageDialog(null, "Errore collegamento a socket "+exc);
                }
            }
        }
    
        // Variables declaration - do not modify//GEN-BEGIN:variables
        private javax.swing.JLabel jLabel1;
        private javax.swing.JScrollPane jScrollPane1;
        private javax.swing.JTable jTable1;
        // End of variables declaration//GEN-END:variables
    
    }
    nel progetto ci sono altre quatto classi: Giocatore, DataSadenza, PanelRender e PanelEditor e lo scopo del programma è di prendere informazioni da internet attraverso la parserizzazione di pagine web e salvarli in un file e conseguentemente visualizzarle a video in una jtable.

    l'interfaccia è stata creata con il gui builder di NetBeans

    se io vado a fare in staic void main jTable1.getModel(); mi da l'errore "non-static variable jTable1 cannot be referenced from a static context"

    ho provato anche a creare un metodo, come vedete in modTabella, fuori allo static void main e richiamarlo in quest'ultimo ma da sempre lo stesso problema.

    ho provato anche a inserire l'oggetto che crea quando fa new main().setVisible(true); in una variabile ma mi dice tipi incompatibili poichè questo new main è void, possibile?

    dovrei ridisegnare io l'interfaccia e lasciare perdere NetBeans?

  2. #2
    All'inizio di static void main fai così:

    codice:
    public static void main(String args[])
    {
        final main myFrame = new main();
        ...
    al posto di:

    codice:
                    public void run()
                    {
                        new main().setVisible(true);
                    }
    usa:

    codice:
                    public void run()
                    {
                        myFrame.setVisible(true);
                    }
    e puoi fare myFrame.jTable1.getModel() nel main.

  3. #3
    grazie mille, proverò e ti farò sapere ma penso proprio che funzionerà

  4. #4
    ok, funge, ancora grazie

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.