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

    Riavviare una classe in java?

    Sono un neofita con Java, e ho riscontrato un problema. Vorrei che alla pressione del JButton "retry" venisse riavviata la classe principale. Ho cercato in giro, e su StackOverflow ho trovato varie soluzioni, ma che non riesco ad implementare. Posto di seguito il codice:
    MAIN

    codice:
    import java.io.*;
    import java.util.*;
    import javax.swing.*;
    import java.awt.event.*;
    import java.awt.*;
    public class prova_main extends JFrame implements ActionListener{
     JTextField text=new JTextField();
     JButton button=new JButton("Invio");
     public prova_main(){
      super("prova");
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      setVisible(true);
      setLayout(null);
      setExtendedState(JFrame.MAXIMIZED_BOTH);
      text.setSize(100,50);
      text.setLocation(400,300);
      add(text).setVisible(true);
      button.setSize(100,50);
      button.setLocation(550,300);
      button.addActionListener(this);
      add(button).setVisible(true);
     }
     public void actionPerformed(ActionEvent e){
      String x=text.getText();
      int y=Integer.parseInt(x);
      if(y%2==0){
      }else{
       prova a=new prova();
       a.setVisible(true);
      }
     }
     public static void main(String[] args){
      new prova_main();
     }
    }

    CLASSE PROVA

    codice:
    import javax.swing.*;
    import java.awt.event.*;
    import java.awt.*;
    import java.io.*;
    import java.util.*;
    public class prova extends JFrame implements ActionListener{
     JButton exit=new JButton("ESCI");
     JButton retry=new JButton("RIPROVA");
     public prova(){
      super("prova");
      setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
      setLayout(null);
      setSize(300,200);
      setLocation(660,300);
      setVisible(true);
      retry.setSize(100,50);
      retry.setLocation(30,100);
      retry.addActionListener(this);
      exit.setSize(100,50);
      exit.setLocation(140,100);
      exit.addActionListener(this);
      add(exit).setVisible(true);
      add(retry).setVisible(true);
     }
     public void actionPerformed(ActionEvent e){
       if(e.getSource() == exit)
        System.exit(0);
       else if(e.getSource() == retry){
        
       }
     }
     public static void main(String[] args){
      new prova();
     }
    }
    Ultima modifica di LeleFT; 20-06-2017 a 12:50 Motivo: Aggiunti i tag CODE

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da Mistyflea Visualizza il messaggio
    Sono un neofita con Java, e ho riscontrato un problema. Vorrei che alla pressione del JButton "retry" venisse riavviata la classe principale.
    "riavviare" vuol dire relativamente molto poco. Quale è la classe principale? (vedo che entrambe hanno il main). Cosa deve succedere al retry??
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    Il main è il file che si chiama prova_main. Alla pressione del JButton retry deve far ricominciare da capo il programma desiderato(in questo caso, prova_main). Per intenderci, se avessi fatto comparire una JLabel vicino al mio JButton, avrei voluto che alla pressione del tasto retry la JLabel scomparisse e ritornasse tutto come se non avessi premuto il bottone.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da Mistyflea Visualizza il messaggio
    Il main è il file che si chiama prova_main. Alla pressione del JButton retry deve far ricominciare da capo il programma desiderato(in questo caso, prova_main). Per intenderci, se avessi fatto comparire una JLabel vicino al mio JButton, avrei voluto che alla pressione del tasto retry la JLabel scomparisse e ritornasse tutto come se non avessi premuto il bottone.
    Quando in prova_main l'utente preme "Invio", se il testo è un intero E pari, non succede nulla (il ramo if infatti è vuoto). Se invece è dispari vai a creare il frame prova e lo rendi visibile.
    Ma non hai reso invisibile il frame prova_main, questo vuol dire che l'utente NON ha alcun obbligo nei confronti del frame prova .. può anche continuare a digitare un altro numero ignorando il frame prova !!

    Quindi è la interazione che non è molto sensata/appropriata. Ripensala.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  5. #5
    Effettivamente questa cosa del riavvio mi serve su un altro programma, un po più strutturato, ho scritto questo che vedi in 10 min come prova, ma penso che tu abbia capito il concetto della mia richiesta. A me interessa quello, non questo programma.

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da Mistyflea Visualizza il messaggio
    Effettivamente questa cosa del riavvio mi serve su un altro programma, un po più strutturato, ho scritto questo che vedi in 10 min come prova, ma penso che tu abbia capito il concetto della mia richiesta. A me interessa quello, non questo programma.
    Ascolta, mantenendo quei due frame come hai mostrato prima, quello che tecnicamente si potrebbe fare è questo:

    1) In prova_main metti un metodo public es. reset() che va a resettare lo stato del frame (banalmente in questo caso basta azzerare il contenuto del JTextField con un setText, nulla di più).

    2) In prova_main quando vai a creare prova andrai ora a fare new prova(this)
    Ovvero passi a prova il riferimento alla istanza di prova_main.

    3) In prova dovrai ovviamente aggiornare il costruttore per ricevere il riferimento a prova_main e tenertelo in una variabile di istanza privata.

    4) Quando in prova viene scelto "RIPROVA", chiudi questo frame prova e invochi reset() sul riferimento a prova_main

    Il risultato è appunto un effetto di "riavvio". Ma in senso concettuale ... tecnicamente di per sé non "riavvii" un bel nulla.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java 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 © 2024 vBulletin Solutions, Inc. All rights reserved.