Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

[Java] Sto sbagliando qualcosa ma non riesco a capire cosa.

Linguaggi e sistemi

Moderatori: Foto UtentePaolino, Foto Utentefairyvilje

0
voti

[1] [Java] Sto sbagliando qualcosa ma non riesco a capire cosa.

Messaggioda Foto UtenteTardoFreak » 24 nov 2010, 12:08

Teoricamente questo programma dovrebbe visualizzare un Frame con un' area di testo scrollabile. Quando lo faccio partire mi appare una finetrina ultraridotta (ci sono solo i pulsanti del form). Ho provato a cercare l' errore ma non capisco dove puo' essere.
Se avete voglia di darci uno sguardo ve ne sarei grato.

Questa e' la classe che implementa il form.
Codice: Seleziona tutto
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package analizzatore1;

import javax.swing.*;
import java.awt.*;

/**
*
* @author Stefano
*/
class PannelloVis extends JFrame
{
  // Dichiarazioni dei controlli
  // Gestore di Layout
  Container contenitore;

  // Pannello di testo
  public JPanel PanelSchermo;        // Pannello che contiene lo schermo
  public JScrollPane ScrollSchermo;  // Barre di scorrimento per il testo
  public JTextArea Schermo;          // Area di testo

  // Costruttore
  public void PannelloVis()
  {
    setDefaultCloseOperation(EXIT_ON_CLOSE);
   
    // gestore di layout
    contenitore = getContentPane();
    contenitore.setLayout(new BorderLayout());

    // Area di testo
    // Usa il pannello per poter settare il bordo rientrante
    PanelSchermo = new JPanel (new GridLayout(1,1));
    PanelSchermo.setBorder(BorderFactory.createLoweredBevelBorder());

    // Questo invece dota l' area di testo della funzionalita' di scroll
    ScrollSchermo = new JScrollPane();
    Schermo = new JTextArea();
    ScrollSchermo.setViewportView(Schermo);

    // Inserisce il tutto dentro il pannello
    PanelSchermo.add(ScrollSchermo);

    // Parte finale. Inserisce i controlli nello schermo
    contenitore.add(PanelSchermo, BorderLayout.CENTER);
  }
}


e questo e' il main

Codice: Seleziona tutto
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package analizzatore1;

/**
*
* @author Stefano
*/
public class Main {

  static PannelloVis finestra;

  /**
   * @param args the command line arguments
   */
  public static void main(String[] args)
  {

    finestra = new PannelloVis();
    finestra.setVisible(true);
  }

}


Edit: Quando chiudo la finestra mi rimangono anche dei processi in funzione. ?%
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[2] Re: [Java] Sto sbagliando qualcosa ma non riesco a capire cosa.

Messaggioda Foto Utenteposta10100 » 24 nov 2010, 20:45

Prima di tutto una finezza: le variabili iniziano con le minuscole, le classi con le maiuscole. Altrimenti poi si fa confusione!

Per il codice io farei così:
Codice: Seleziona tutto
    /*
    * To change this template, choose Tools | Templates
    * and open the template in the editor.
    */

    package analizzatore1;

    import javax.swing.*;
    import java.awt.*;

    /**
    *
    * @author Stefano
    */
    class PannelloVis extends JFrame
    {
      // Dichiarazioni dei controlli
      // Gestore di Layout
      Container contenitore;

      // Pannello di testo
      public JPanel PanelSchermo;        // Pannello che contiene lo schermo
      public JScrollPane ScrollSchermo;  // Barre di scorrimento per il testo
      public JTextArea Schermo;          // Area di testo

      // Costruttore
      public void PannelloVis()
      {
        setDefaultCloseOperation(EXIT_ON_CLOSE);
       
        // gestore di layout
        contenitore = getContentPane();
        contenitore.setLayout(new BorderLayout());

        // Area di testo
        // Usa il pannello per poter settare il bordo rientrante
        PanelSchermo = new JPanel (new GridLayout(1,1));
        PanelSchermo.setBorder(BorderFactory.createLoweredBevelBorder());

        // Questo invece dota l' area di testo della funzionalita' di scroll
        Schermo = new JTextArea();
        Schermo.setSize(100, 100);
        ScrollSchermo = new JScrollPane(Schermo);

        // Inserisce il tutto dentro il pannello
        PanelSchermo.add(ScrollSchermo);

        // Parte finale. Inserisce i controlli nello schermo
        contenitore.add(PanelSchermo, BorderLayout.CENTER);
      }
    }


TardoFreak ha scritto:Edit: Quando chiudo la finestra mi rimangono anche dei processi in funzione. ?%

Bisogna aggiungere un listener sull'evento di chiusura.
A memoria non me lo ricordo, più tardi ti posto il codice.
O_/
http://millefori.altervista.org
Tool gratuito per chi sviluppa su millefori.

Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. (A. Einstein)
Se non c'e` un 555 non e` un buon progetto (IsidoroKZ)

Strumento per formule
Avatar utente
Foto Utenteposta10100
5.550 4 10 13
Master EY
Master EY
 
Messaggi: 4832
Iscritto il: 5 nov 2006, 0:09

0
voti

[3] Re: [Java] Sto sbagliando qualcosa ma non riesco a capire cosa.

Messaggioda Foto Utenteposta10100 » 24 nov 2010, 20:51

Dovrebbe bastare così:
Codice: Seleziona tutto
    /*
    * To change this template, choose Tools | Templates
    * and open the template in the editor.
    */

    package analizzatore1;

    /**
    *
    * @author Stefano
    */
    public class Main {

      static PannelloVis finestra;

      /**
       * @param args the command line arguments
       */
      public static void main(String[] args)
      {

        finestra = new PannelloVis();
        finestra.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        finestra.setVisible(true);
      }

    }
http://millefori.altervista.org
Tool gratuito per chi sviluppa su millefori.

Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. (A. Einstein)
Se non c'e` un 555 non e` un buon progetto (IsidoroKZ)

Strumento per formule
Avatar utente
Foto Utenteposta10100
5.550 4 10 13
Master EY
Master EY
 
Messaggi: 4832
Iscritto il: 5 nov 2006, 0:09

0
voti

[4] Re: [Java] Sto sbagliando qualcosa ma non riesco a capire cosa.

Messaggioda Foto UtenteBerello » 25 nov 2010, 1:12

posta10100, ma tu hai provato quel codice?
A me non funziona, la finestra rimane di dimensioni piccolissime. #-o

In ogni caso il comando setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); era stato già dato da TF nel costruttore di PanneloVis.

Ho dato un'occhiata (rapida :oops: ) al codice di TF e non ho notato errori.
Probabilmente c'è qualche dimensione da impostare (ho visto che posta10100 ha messo nel costruttore le dimensioni della textarea, ma non va ancora bene) o qualche proprietà di uno degli oggetti da impostare. Ricordo che una volta, con 2 amici, siamo impazziti perché una qualche casella di testo appariva sempre di dimensioni piccolissime, alla fine abbiamo scoperto che bisognava cambiare qualche proprietà poco significante (apparentemente) e tutto si risolveva! ;-)



EDIT:
Mi correggo, ho trovato un errore GRAVISSIMISSIMO!!! :mrgreen:
Il costruttore ha un tipo di ritorno definito come void!!! Attenzione: il tipo di ritorno del costruttore deve essere necessariamente il tipo della classe che si sta definendo! Cioè il nome stesso del costruttore! :mrgreen:
Perciò il tipo del costruttore non va definito. Devi cancellare il "void" prima del costruttore. Questo risolve il problema del processo che non si chiude! ;-)
Avatar utente
Foto UtenteBerello
110 1 3 7
Expert EY
Expert EY
 
Messaggi: 449
Iscritto il: 3 mar 2009, 23:53
Località: Roma

0
voti

[5] Re: [Java] Sto sbagliando qualcosa ma non riesco a capire cosa.

Messaggioda Foto UtenteTardoFreak » 25 nov 2010, 1:46

Quindi nel costruttore non bisogna specificare il tipo!

Azz, mi faccio subito un nodo all' ucc... ehm scusate ... al fazzoletto. :mrgreen: Anzi me lo scrivo in mente nel mio BIOS. :ok:

Grazie Berello. Ora sono troppo stanco, domani lo provero' e postero' i risultati. :-)
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[6] Re: [Java] Sto sbagliando qualcosa ma non riesco a capire cosa.

Messaggioda Foto UtenteBerello » 25 nov 2010, 2:42

Ho dato un'occhiata anche all'altra questione (quella della dimensione della finestra).
Io non imparerò mai le tecniche per dimensionare gli oggetti in Java! :mrgreen:
Ogni volta mi tocca capire di nuovo tutto da capo! :-P

A quanto pare, quando si usa JScrollPane, il suo contenitore si sente libero di assumere qualsiasi dimensione (perché tanto poi i problemi li risolve[rebbe] la scrollbar...) e per questo la tua finestra va a rimpicciolirsi fino alla dimensione 0x0 (perché JScrollPane non pone vincoli di dimensioni minime).
Ho visto diversi siti suggerire di vincolare le dimensioni della finestra.

Quindi dovresti aggiungere al tuo codice (come ultima riga del costruttore) questa riga:
Codice: Seleziona tutto
this.setSize(200, 100);

che imposterà le dimensioni della finestra a 200x100.

Altrimenti, potresti aggiungere questa riga:
Codice: Seleziona tutto
this.setMinimumSize(new Dimension(100, 50));

che impedisce alla finestra di diventare più piccola di 100x50.

Se invece vuoi che la finestra abbia una dimensione iniziale scelta da te e anche una dimensione minima (al di sotto della quale non si può scendere neanche manualmente), allora potresti usare entrambi i comandi, così:
Codice: Seleziona tutto
this.setSize(200, 100);
this.setMinimumSize(new Dimension(100, 50));


Prova tutte e 3 le possibilità per vedere la differenza! ;-)
Poi scegli tu quella che preferisci, le ho provate e funzionano tutte.
(personalmente preferisco la terza)

Piccolo riepilogo:
-Togliere void dalla dichiarazione del costruttore;
-Aggiungere le 2 righe indicate prima di chiudere la graffa "}" del costruttore.
Con queste due modifiche mi pare che funzioni tutto come si voleva! ;-)

Facci sapere! :mrgreen:
Avatar utente
Foto UtenteBerello
110 1 3 7
Expert EY
Expert EY
 
Messaggi: 449
Iscritto il: 3 mar 2009, 23:53
Località: Roma

0
voti

[7] Re: [Java] Sto sbagliando qualcosa ma non riesco a capire cosa.

Messaggioda Foto Utenteposta10100 » 25 nov 2010, 9:13

Berello ha scritto:posta10100, ma tu hai provato quel codice?

A dir la verita`... no :oops:
In quel momento non avevo la possibilita` di compilare il codice e sono andato ad occhio #-o

Berello ha scritto:In ogni caso il comando setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); era stato già dato da TF nel costruttore di PanneloVis.

Hai ragione, mi era sfuggito!
Berello ha scritto:ho visto che posta10100 ha messo nel costruttore le dimensioni della textarea, ma non va ancora bene

Mi e` capitato spesso di litigare con le dimensioni, per questo l'ho impostata ma mi sono dimenticato di quella minima.
Ormai le finestre non le disegno piu` a mano da una vita, o utilizzo quelle che mi sono faticosamente scritto in passato oppure mi faccio dare una mano da IntelliJ e faccio tutto per via grafica.

Berello ha scritto:Piccolo riepilogo:
-Togliere void dalla dichiarazione del costruttore;
-Aggiungere le 2 righe indicate prima di chiudere la graffa "}" del costruttore.
Con queste due modifiche mi pare che funzioni tutto come si voleva! ;-)

Bravo! =D>
http://millefori.altervista.org
Tool gratuito per chi sviluppa su millefori.

Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. (A. Einstein)
Se non c'e` un 555 non e` un buon progetto (IsidoroKZ)

Strumento per formule
Avatar utente
Foto Utenteposta10100
5.550 4 10 13
Master EY
Master EY
 
Messaggi: 4832
Iscritto il: 5 nov 2006, 0:09

0
voti

[8] Re: [Java] Sto sbagliando qualcosa ma non riesco a capire cosa.

Messaggioda Foto UtenteTardoFreak » 25 nov 2010, 12:22

Confermo che tutto funziona in modo giusto e perfetto. :ok:

Ringrazio tutti per l' attenzione.

P.S.: questo e' l' ennesimo linguaggio che studio da quando ho 16 anni. La storia e' sempre la stessa: teoria e poi mal di testa quando ci si blocca. Il rimedio e' sempre lo stesso: lavoro, impegno ed ore davanti al computer.
Oggi pero' e' meglio. I forum (ElectroYou in particolare) sono una risorsa incredibile. :D
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[9] Re: [Java] Sto sbagliando qualcosa ma non riesco a capire cosa.

Messaggioda Foto UtenteBerello » 25 nov 2010, 14:10

posta10100 ha scritto:Mi e` capitato spesso di litigare con le dimensioni, per questo l'ho impostata ma mi sono dimenticato di quella minima.

A chi lo dici!!! Esistono alcune proprietà legate alle dimensioni che sembrano essere quasi sempre ignorate da Java! :mrgreen:
Non capisco allora perché le abbiano aggiunte...
Comunque generalmente (per le esperienze che ho avuto) ho visto che le 2 proprietà utili che vanno impostate per un oggetto (perché abbia le dimensioni volute) sono:
-this.setMinimumSize(new Dimension(X, Y));
-this.setPreferredSize(new Dimension(X, Y));
Entrambe vanno impostate, altrimenti le cose non sembrano andare proprio bene.
Le altre proprietà sulle dimensioni invece mi sembra che vengano ignorate quasi sempre. Ma probabilmente (anzi, forse dovrei dire sicuramente :D ) questo è dovuto al fatto che non ho le idee chiare sulle proprietà relative alle dimensioni in Java. ;-)
Ma non sono l'unico: ho visto tanta gente avere problemi del genere, sia "nel mondo reale", sia su diversi forum su internet.

Nonostante ciò, nel caso di TF la soluzione è stata diversa! :mrgreen:
Avatar utente
Foto UtenteBerello
110 1 3 7
Expert EY
Expert EY
 
Messaggi: 449
Iscritto il: 3 mar 2009, 23:53
Località: Roma


Torna a PC e informatica

Chi c’è in linea

Visitano il forum: Nessuno e 10 ospiti