Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [JAVA] problemi ad aprire un frame

    Ciao a tutti!

    Questa è davvero da ridere!
    Ho scritto il codice per un frame, che in teoria dovrebbe stampare i dati inseriti nei suoi JTextField...il problema è che, ora che pensavo di aver finito il codice, che sembrava tutto a posto dopo averlo compilato, ho provato a richiamarlo e non succede niente.. that's fantastic! :master:
    Io non capisco, ma ora posto il codice, se qualche illuminato ha un'idea di dove ho sbagliato mi fa luce per favore?
    codice:
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
    import javax.swing.*;
    import java.awt.*;
    import java.io.*;
    
    public class frame1 extends JFrame {
        private static final long serialVersionUID = 1L;
    
    // Creazione dei componenti
        JButton[] bottone;
        JPanel pannelloBottoni;
        JPanel pannelloCampi;
        Container pannelloApplet;
    
        public JTextField aCode = new JTextField(10);
        public JTextField aNome = new JTextField(10);
        public JTextField società = new JTextField(10);
        public JTextField v100 = new JTextField(10);
        public JTextField c100 = new JTextField(10);
        public JTextField g100 = new JTextField(10);
    
    //Labels
        public JLabel lab1 = new JLabel("Codice articolo:");
        public JLabel lab2 = new JLabel("Nome articolo:");
        public JLabel lab3 = new JLabel("Società di produzione:");
        public JLabel lab4 = new JLabel("Venduti/100:");
        public JLabel lab5 = new JLabel("Costo di cento unità:");
        public JLabel lab6 = new JLabel("Guadagno con 100 unità:");
    
    	public frame1() {
    
    	super("ProvaSerializzazione#1");
    
    	setSize(400, 250);
    
    	setDefaultCloseOperation(EXIT_ON_CLOSE);
    
    //   Settaggio testo
    	aCode.setEditable(true);
    	aNome.setEditable(true);
    	società.setEditable(true);
    	v100.setEditable(true);
    	c100.setEditable(true);
    	g100.setEditable(true);
    
    /*	JPanel pannello = new Jpanel(); // Creazione del pannello che conterrà i pulsanti
    
    	pannello.add(pulsanteUno); // Aggiunta dei pulsanti al pannello
    
    	pannello.add(pulsanteDue);
    
    	setContentPane(pannello); // Trasforma il pannello nel contenuto del frame
    
    	setVisible(true); // Visualizza l'intero frame
    */
    	// Definisco il layout dell'applet: 
    	pannelloApplet = getContentPane();
    	pannelloApplet.setLayout(new BorderLayout());
    
    	// inseriremo i 6 bottoni in un pannello che verra' inserito 
    	// nel centro dell'applet. Costruiamo il pannello:
    	pannelloBottoni = new JPanel();
    
    	// dispongo i 2 bottoni in una griglia:
    	pannelloBottoni.setLayout(new FlowLayout());
    
    	// definisco un array di 2 bottoni.
    	bottone = new JButton[2];
    
    	// inizializzo i bottoni e li aggiungo al pannelloBottoni.
    	// Etichetta dei bottoni:
    	String[] nomeBottone = {"Salva come positivo", "Salva come negativo"};
    
    	// Colore di sfondo dei bottoni: 
    	Color[] coloreBottone = {Color.red, Color.cyan};
    
    	for (int i = 0; i < bottone.length; i++) {
    	    bottone[i] = new JButton(nomeBottone[i]);
    	    bottone[i].setBackground(coloreBottone[i]);
    	    pannelloBottoni.add(bottone[i]);}
    
    	// inserisco il pannelloBottoni a sud dell'applet: 
    	pannelloApplet.add(pannelloBottoni, BorderLayout.SOUTH);
    
    //	Definisco il pannello e i campi d'Input che dovrà contenere:
    	JPanel pannelloCampi = new JPanel();
    	pannelloCampi.setLayout(new GridLayout(6,2,0,0));
    
    //	Inserisco in pannelloCampi le labels e i campi d'input:
    	pannelloCampi.add(lab1);
    	pannelloCampi.add(aCode);
    
    	pannelloCampi.add(lab2);
    	pannelloCampi.add(aNome);
    
    	pannelloCampi.add(lab3);
    	pannelloCampi.add(società);
    
    	pannelloCampi.add(lab4);
    	pannelloCampi.add(v100);
    
    	pannelloCampi.add(lab5);
    	pannelloCampi.add(c100);
    
    	pannelloCampi.add(lab6);
    	pannelloCampi.add(g100);
    
    	// inserisco il pannelloCampi a nord dell'applet:
    	pannelloApplet.add(pannelloCampi, BorderLayout.NORTH);
    
    	//ActionListener(s) da implementare dopo questa classe
    	Receiver1 receiver1 = new Receiver1();
    	Receiver2 receiver2 = new Receiver2();
    
    	//		assegnazione ActionListener(s) ai corrispondenti JButton(s)	assegnazione ActionListener(s) ai corrispondenti JButton(s)
    	bottone[0].addActionListener(receiver1);
    	bottone[1].addActionListener(receiver2);
    
    	}
    
        class Receiver1 implements ActionListener {
    	public void actionPerformed(ActionEvent e) {
    
    	String code = aCode.getText ();
    	String nome = aNome.getText ();
    	String societàP = società.getText ();
    	String venduti = v100.getText ();
    	String costo = c100.getText ();
    	String guadagno = g100.getText ();
    
    // Creo un file su cui scrivere, lo denomino per ora prova.odt
          try{
              FileOutputStream prova = new FileOutputStream("/home/jekotojava/Documenti/prova.odt");
              PrintStream scrivi = new PrintStream(prova);
    
    // Scrivo sul nuovo standard output:
    	scrivi.println("\n Positivi.\n");
    	scrivi.println("* Codice dell'articolo: "+ code);
    	scrivi.println("* Nome dell'articolo: "+ nome);
    	scrivi.println("* Società produttrice dell'articolo: "+ societàP);
    	scrivi.println("* Percentuale di articoli venduti al mese: "+ venduti);
    	scrivi.println("* Costo di 100 unità (€): "+ costo);
    	scrivi.println("* Guagagno con 100 unità vendute (€): "+ guadagno);
    	scrivi.println("\n Articolo giudicato di guadagno.");
    
    	}catch (IOException ioe){
              System.out.println("Errore: " + ioe);
    			}
    		}
    	}
    
        // "Salva come negativo":
        class Receiver2 implements ActionListener {
    	public void actionPerformed(ActionEvent e) {
    
    	String code = aCode.getText ();
    	String nome = aNome.getText ();
    	String societàP = società.getText ();
    	String venduti = v100.getText ();
    	String costo = c100.getText ();
    	String guadagno = g100.getText ();
    
    // Creo un file su cui scrivere, lo denomino per ora nonProva.odt
          try{
              FileOutputStream prova = new FileOutputStream("/home/jekotojava/Documenti/nonProva.odt");
              PrintStream scrivi = new PrintStream(prova);
    
    // Scrivo sul nuovo standard output:
    	scrivi.println("\n Negativi.\n");
    	scrivi.println("* Codice dell'articolo: "+ code);
    	scrivi.println("* Nome dell'articolo: "+ nome);
    	scrivi.println("* Società produttrice dell'articolo: "+ societàP);
    	scrivi.println("* Percentuale di articoli venduti al mese: "+ venduti);
    	scrivi.println("* Costo di 100 unità (€): "+ costo);
    	scrivi.println("* Guagagno con 100 unità vendute (€): "+ guadagno);
    	scrivi.println("\n Articolo giudicato di non-guadagno.");
    
    	}catch (IOException ioe2){
              System.out.println("Errore: " + ioe2);
    			}
    		}
    	}
    
    public static void main(String argv[]) {
    
    	frame1 f1 = new frame1();
    	}
    }
    Grazie!!
    Gato

  2. #2
    Utente di HTML.it L'avatar di @DI3GO@
    Registrato dal
    Nov 2008
    Messaggi
    537
    il setVisible va fatto alla fine, dopo aver creato ed assegnato tutti gli elementi al contenitore.
    Altrimenti ti viene mostrato solamente quello che è stato aggiunto prima di tale comando, ovvero in questo caso il nulla.
    Nipote: persona incompetente, con le soli doti di "copia/incolla" e la creazione automatica di siti internet ed interfaccie grafiche.Compie lavori apparentemente qualificati e richiesta una modifica sparisce in quatemala con i pochi soldi ottenuti.[...] Fonte la Diegonzelli

  3. #3
    Utente di HTML.it L'avatar di desa
    Registrato dal
    Oct 2008
    Messaggi
    569
    Comunque c'è un altro piccolo dettaglio: il setVisible è sotto commento...

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da @DI3GO@
    il setVisible va fatto alla fine, dopo aver creato ed assegnato tutti gli elementi al contenitore.
    Altrimenti ti viene mostrato solamente quello che è stato aggiunto prima di tale comando, ovvero in questo caso il nulla.
    No, non è questo .... il setVisible l'ha commentato!! (almeno per quello che vedo nel codice postato)
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it L'avatar di @DI3GO@
    Registrato dal
    Nov 2008
    Messaggi
    537
    Originariamente inviato da andbin
    No, non è questo .... il setVisible l'ha commentato!! (almeno per quello che vedo nel codice postato)
    Ma scusa, non è corretto quello che ho detto.
    A volte mi capitava che doveva essere l'ultima operazione che dovevo fare.

    Cmq noto ora che è commentato..
    Nipote: persona incompetente, con le soli doti di "copia/incolla" e la creazione automatica di siti internet ed interfaccie grafiche.Compie lavori apparentemente qualificati e richiesta una modifica sparisce in quatemala con i pochi soldi ottenuti.[...] Fonte la Diegonzelli

  6. #6
    Centro!
    Eh, c'erano alcune parti che volevo omettere dalla mia applicazione, ma devo aver fatto un errore di distrazione di cui dopo non mi sono più accorto...
    Grazie mille a tutti, ora funzia tutto!
    Ma se il setVisible non c'è, e quindi per default è false, non dovrebbe aprirsi il frame ma non apparire sullo schermo?
    Gato

  7. #7
    Si infatti era proprio commentato..succede purtroppo, credo che sia un errore abbastanza ridicolo e banale..
    Gato

  8. #8
    Utente di HTML.it L'avatar di desa
    Registrato dal
    Oct 2008
    Messaggi
    569
    Senza il setVisible a true il JFrame viene istanziato in memoria come un qualunque oggetto ma non viene mostrato nulla sul display... quello che succedeva a te, insomma. Che intendi con "aprirsi"?

  9. #9
    Per "aprirsi" intendo che l'applicazione si avvia.. se ho capito bene quello che dici l'applicazione si avvia, giusto? Mentre quando dal terminalino di Linux tentavo di avviare il frame, semplicemente cambiava "riga", come se avessi semplicemente premuto invio senza scrivere niente.... :master:
    codice:
    jekotojava@jekotojava-exDemo:~/Scrivania/Prova2$ java frame1
    jekotojava@jekotojava-exDemo:~/Scrivania/Prova2$
    Gato

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da fpertegato
    semplicemente cambiava "riga", come se avessi semplicemente premuto invio senza scrivere niente.... :master:
    Il programma certo che si avvia, altrimenti avresti errori o a livello di esecuzione dell'eseguibile 'java' (non parte la JVM) o a livello di eccezioni nel tuo codice. Non vedo errori ... quindi, di certo si avvia.

    La questione è che il tuo main() è brevissimo, invoca solo un costruttore che a sua volta fa poi solo qualche altra istanziazione e invocazioni di metodi, tutto comunque brevissimo come tempo.
    Terminato il main() quindi in teoria dovrebbe terminare anche la JVM. Ma .... se c'è almeno un componente grafico visualizzabile, non termina.

    C'è la spiegazione qui: Auto-shutdown

    Dove si arriva al punto: "the JVM will not exit while there is at least one displayable component."
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.