Newsgroup: it.comp.java
Titolo: Visual Editor di Eclipse

Ho appena installato "EasyEclipse Desktop Java", che e' una
distribuzione di Eclipse con gia' inclusi alcuni plugin come il "Visual
Editor".
Sto provando a scrivere un programma con Swing usando il Visual Editor.
Dalla Palette ho selezionato un JFrame e l'ho posizionato nella
Visual Editor Design view, e Eclipse mi ha generato il codice Java che
di seguito riporto.
Quando provo a lanciare il programma mi appare l'errore che riporto
alla fine di questo messaggio.
Se jFrameProva e jContentPaneProva e i relativi metodi get li dichiaro
"static" il programma funziona, pero' sicuramente non e' questa la
soluzione al problema, se no Eclipse avrebbe gia' incluso "static"
nelle righe del programma quando ha generato il codice.
Come devo fare per far funzionare il programma?
package esempio2;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import java.awt.Dimension;
public class Esempio2
{
 private JFrame jFrameProva = null;  // 
@jve:decl-index=0:visual-constraint="33,26"
 private JPanel jContentPaneProva = null;
 private JFrame getJFrameProva() {
  if (jFrameProva == null) {
   jFrameProva = new JFrame();
   jFrameProva.setSize(new Dimension(265, 109));
   jFrameProva.setTitle("Titolo di prova");
   jFrameProva.setVisible(true);
   jFrameProva.setContentPane(getJContentPaneProva());
  }
  return jFrameProva;
 }
 private JPanel getJContentPaneProva() {
  if (jContentPaneProva == null) {
   jContentPaneProva = new JPanel();
   jContentPaneProva.setLayout(new BorderLayout());
   jContentPaneProva.setPreferredSize(new Dimension(0, 0));
  }
  return jContentPaneProva;
 }
 public static void main(String[] args)
 {
  jFrameProva=getJFrameProva(); // <----- Errore
 }
}
*******************************************************************
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
 Cannot make a static reference to the non-static field jFrameProva
 Cannot make a static reference to the non-static method getJFrameProva() 
from the type Esempio2
 at esempio2.Esempio2.main(Esempio2.java:33)

 getJFrameProva() from the type Esempi
Non � un problema di visual editor, ma di linguaggio.
Stai richiamando un metodo non statico da un metodo statico.
Forse dovresti approfondire questo concetto.


Il problema deriva dal faqtto che stai usando un metodo non statico e 
quindi ch enon esiste fino alla creazione dell' ogegtto in un metodo 
statico, ovvero che � sempre presente anche se non crei un oggetto 
relativo alla classe, per poter usare il metodo non statico devi creare 
l'oggetto relativo alla tua classe es.:
Esempio2 appGui = new Esempio2();
appGui.jFrameProva = getJFrameProva();

 Forse dovresti approfondire questo concetto.
Credo di aver risolto il problema, ho creato due file distinti, un file
con il metodo statico main e un file con i componenti Swing.
Nel file con Swing ho creato un metodo pubblico con scritto
jFrameProva=getJFrameProva();
tale metodo pubblico viene chiamato dal main dell'altro file.
Come soluzione va bene? Ci sono soluzioni migliori?
Non mi sembra che ci siano altre soluzioni.
Adesso ho un altro problema:
se seleziono dalla Palette un JButton e provo a collocarlo all'interno
del JFrame il JButton NON mi si posiziona.
All'esterno del JFrame appare ma all'interno del JFrame non c'e' verso
di farlo apparire.
Ho lo stesso problema con tutti i componenti Swing.

 appGui.jFrameProva = getJFrameProva();
Avevo gia' trovato la soluzione comunque GRAZIE della risposta.


prova ad aggiungere tramite palette un layout alla tua applicazione, e 
poi aggiungi il bottone a tale layout

 aggiungi il bottone a tale layout
Ho provato ma e' tutto come prima.
Per favore mi puoi spiegare PASSO PASSO come fare per creare una JFrame
con dentro tre JBotton?


purtroppo non uso eclipse, di solito uso netbeans.
ma da codice puoi impostare la proprietï¿œ setLocation del JButton es.:
jButton1.setLocation(0, 10);
jButton2.setLocation(0, 20);
jButton3.setLocation(0, 30);
poi aggiungi il tutto al JFrame	es.:
JFrame appGUI = new JFrame();
appGui.add(jButton1);
appGui.add(jButton2);
appGui.add(jButton3);
appGui.pack();
appGui.setVisible(true);
la seconda parte puoi aggiungerla direttamente al main, mi diresti il 
nome del visual editor cosï¿œ che posso istallarlo su eclipse, e provare 
ad aiutarti meglio, grazie

 aiutarti meglio, grazie
Sono io che ringrazio te.
Credo che il plugin si chiami propio "Visual Editor"

 del JFrame il JButton NON mi si posiziona.
Ti do un consiglio, visto che ci sono passato.
Impara bene cosa � un layout manager e in cosa differiscono (ce ne sono 
diversi). A quel punto ti niente fermer�.
In questo tutorial trovi tutto ci� che ti puo' servire sapere:
http://java.sun.com/docs/books/tutorial/uiswing/components/index.html
Non lasciarti sfuggire "A visual index to swing components". Spesso ti 
capiter� ti domandarti quali siano le propriet� / metodi da interrogare per 
un determinato widget. Clicchi sull'indice e trovi di tutto.
Ciao.


Ciao Baldo, sono riuscito ad istallare il plugin e ho fatto un po' di 
prove, a me non da nessun problema di collocazione dei bottoni sul 
JFrame, comunque di seguito ti posto il codice che eclipse ha generato:
package esempio2;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.BoxLayout;
import java.awt.GridLayout;
import javax.swing.JButton;
import java.awt.Rectangle;
public class Esempio2
{
  private JFrame jFrameProva = null;  // 
@jve:decl-index=0:visual-constraint="107,62"
  private JPanel jContentPaneProva = null;
private JButton jButton1 = null;
private JButton jButton12 = null;
private JButton jButton3 = null;
private JFrame getJFrameProva() {
   if (jFrameProva == null) {
    jFrameProva = new JFrame();
    jFrameProva.setSize(new Dimension(433, 194));
    jFrameProva.setTitle("Titolo di prova");
    jFrameProva.setVisible(true);
    jFrameProva.setContentPane(getJContentPaneProva());
   }
   return jFrameProva;
  }
  private JPanel getJContentPaneProva() {
   if (jContentPaneProva == null) {
    jContentPaneProva = new JPanel();
    jContentPaneProva.setLayout(null);
    jContentPaneProva.setPreferredSize(new Dimension(0, 0));
    jContentPaneProva.add(getJButton1(), null);
    jContentPaneProva.add(getJButton12(), null);
    jContentPaneProva.add(getJButton3(), null);
   }
   return jContentPaneProva;
  }
  /**
  * This method initializes jButton1	
  * 	
  * @return javax.swing.JButton	
  */
private JButton getJButton1() {
	if (jButton1 == null) {
		jButton1 = new JButton();
		jButton1.setBounds(new Rectangle(14, 15, 93, 29));
		jButton1.setText("Bottone1");
	}
	return jButton1;
}
/**
  * This method initializes jButton12	
  * 	
  * @return javax.swing.JButton	
  */
private JButton getJButton12() {
	if (jButton12 == null) {
		jButton12 = new JButton();
		jButton12.setBounds(new Rectangle(14, 59, 93, 29));
		jButton12.setText("Bottone2");
	}
	return jButton12;
}
/**
  * This method initializes jButton3	
  * 	
  * @return javax.swing.JButton	
  */
private JButton getJButton3() {
	if (jButton3 == null) {
		jButton3 = new JButton();
		jButton3.setBounds(new Rectangle(14, 109, 93, 29));
		jButton3.setText("Bottone3");
	}
	return jButton3;
}
public static void main(String[] args)
  {
   Esempio2 appGui = new Esempio2();
   appGui.getJFrameProva();
  }
}

 comunque di seguito ti posto il codice che eclipse ha generato:
Ho risolto il problema: nella finestra di creazione di una classe
visuale bisogna selezionare nella finestrella "Style" il tipo di Swing
container (per esempio "Frame").
Io vengo dal C++ Builder, sono solo pochi giorni che uso il Visual
Editor di Eclipse, ma riguardo alla programmazione visuale il C++
Builder e' MOLTO, ma MOLTO, MEGLIO.

il 23.01.2010 11.09, Scrive Bracco Baldo 35168368:

getJFrameProva() e' un metodo privato, non-statico della classe 
Esempio2, per invocrlo devi prima istanziare la classe, ad esempio:
public static void main(String[] args) {
   Esempio2 e = new Esempio2();
   JFrame f = e.getJFrameProva();
...
pero' getJFrameProva() e' privato, quindi puo' essere istanziato solo 
all'interno della classe Esempio2. Per cui o rendi il metodo public 
oppure lo invochi dal costruttore. Nel qual caso dovresti aggiungere un 
costruttore alla classe, ad esempio
public Esempio2() {
   JFrame f = getJFrameProva();
   f.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE).
   f.setVisible(true);
   f.pack();
}
da cui il main sara' semplicemente:
public static void main(String[] args) {
   Esempio2 e = new Esempio2();
}


Beh io baldo non conosco il c++ Builder, ma posso garantirti che con il 
framework Swing di java, basta che ci prendi un po' la mano e ti ci 
troverai benissimo, in caso prova ad usare netbeans, un po' piï¿œ pratico 
sull' aspetto delle gui