Repository 32bit  Forum
Repository 64bit  Wiki

[JAVA] Contenuto Frame compare solo se ridimensionata

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.

[JAVA] Contenuto Frame compare solo se ridimensionata

Messaggioda ulisse89 » gio giu 18, 2009 16:37

Ciao. E' tutto il pomeriggio che sto perdendo la testa a capire perchè in questa applicazione grafica, quando creo MainFrame , i componenti si vedono solo se ridimensiono la finestra (anche di pochissimo, sia se l'allargo che se la restringo). Posto tutto il codice della classe MainFrame, anche se l'errore probabilmente sarà nel metodo initGUI().

Grazie a chi mi darà una mano. :thumbright:

Codice: Seleziona tutto
package gui;
import javax.swing.*;
import model.StopFactory;
import routing.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
public class MainFrame extends JFrame implements ActionListener {
   
   static final long serialVersionUID = 1L;
   
   private FullRouteCalculator routeCalculator;
   private JLabel partenzaLabel;
   private JLabel arrivoLabel;
   private JComboBox partenzaComboBox;
   private JComboBox arrivoComboBox;
   private JPanel selectionPanel;
   private JPanel partenzaArrivoPanel;
   private JPanel searchPanel;
   private JLabel changeLabel;
   private JComboBox changeComboBox;
   private JButton searchButton;
   private JPanel outputPanel;
   private JTextArea outputArea;
   
   public MainFrame()
   {
      super();
      this.routeCalculator = new FullRouteCalculator();
      initGUI();
   }
   
   public void initGUI()
   {
      this.setLayout(new BorderLayout());
      
      Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
      this.setSize(screenSize.width/2, screenSize.height/2);
      this.setLocation((int)(screenSize.width - getWidth()) / 2, (int)(screenSize.height - this.getHeight())/2);
      this.setVisible(true);
      this.setDefaultCloseOperation(EXIT_ON_CLOSE);
      
      selectionPanel = new JPanel();
      selectionPanel.setLayout(new GridLayout(2, 1));
      {
         partenzaArrivoPanel = new JPanel();
         FlowLayout layout = new FlowLayout();
         layout.setHgap(15);
         partenzaArrivoPanel.setLayout(layout);
         {
            partenzaLabel = new JLabel("Partenza: ");
            partenzaComboBox = new JComboBox();
            partenzaArrivoPanel.add(partenzaLabel);
            partenzaArrivoPanel.add(partenzaComboBox);

            arrivoLabel = new JLabel("Arrivo: ");
            arrivoComboBox = new JComboBox();
            partenzaArrivoPanel.add(arrivoLabel);
            partenzaArrivoPanel.add(arrivoComboBox);
            
            changeLabel = new JLabel("Cambi: ");
            changeComboBox = new JComboBox();
            changeComboBox.addItem("0");
            changeComboBox.addItem("1");
            changeComboBox.addItem("2");
            changeComboBox.addItem("3");
            partenzaArrivoPanel.add(changeLabel);
            partenzaArrivoPanel.add(changeComboBox);
         }
         
         populateComboBoxes();
         
         searchPanel = new JPanel();
         searchPanel.setLayout(new FlowLayout());
         {
            searchButton = new JButton("Cerca");
            searchButton.addActionListener(this);
            searchPanel.add(searchButton);
         }
      }
      selectionPanel.add(partenzaArrivoPanel);
      selectionPanel.add(searchPanel);
      
      outputPanel = new JPanel();
      outputArea = new JTextArea(50, 100);
      outputPanel.add(outputArea);

      this.getContentPane().add(selectionPanel, BorderLayout.NORTH);
      this.getContentPane().add(outputPanel, BorderLayout.WEST);
   }
      
   public void populateComboBoxes()
   {
      StopFactory factory = StopFactory.getInstance();
      for(String a : factory.getStopsNames())
      {
         partenzaComboBox.addItem(a);
      }
      for(String a : factory.getStopsNames())
      {
         arrivoComboBox.addItem(a);
      }
   }
   
   public void actionPerformed(ActionEvent e)
   {
      if(e.getSource() == searchButton)
      {
         try
         {
            ArrayList<Route> routeSet = routeCalculator.calculate(partenzaComboBox.getSelectedItem().toString(), arrivoComboBox.getSelectedItem().toString(), Integer.parseInt((String)changeComboBox.getSelectedItem()));
            for(Route a : routeSet)
            {
               outputArea.append(a.toString());
               outputArea.append("\n");
            }
         }
         catch(Exception ex)
         {}
      }
   }

}
Ultima modifica di ulisse89 il ven giu 19, 2009 11:17, modificato 1 volta in totale.
Avatar utente
ulisse89
Packager
Packager
 
Messaggi: 644
Iscritto il: sab gen 17, 2009 12:53
Località: Bologna
Nome Cognome: Riccardo
Slackware: 13.0
Kernel: 2.6.29.6
Desktop: Xfce

Re: [JAVA] Contentuto Frame compare solo se ridimensionata

Messaggioda d4z_c0nf » gio giu 18, 2009 16:56

ulisse89 ha scritto:Ciao. E' tutto il pomeriggio che sto perdendo la testa a capire perchè in questa applicazione grafica, quando creo MainFrame , i componenti si vedono solo se ridimensiono la finestra (anche di pochissimo, sia se l'allargo che se la restringo). Posto tutto il codice della classe MainFrame, anche se l'errore probabilmente sarà nel metodo initGUI().

Grazie a chi mi darà una mano. :thumbright:

Codice: Seleziona tutto
package gui;
import javax.swing.*;
import model.StopFactory;
import routing.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
public class MainFrame extends JFrame implements ActionListener {
   
   static final long serialVersionUID = 1L;
   
   private FullRouteCalculator routeCalculator;
   private JLabel partenzaLabel;
   private JLabel arrivoLabel;
   private JComboBox partenzaComboBox;
   private JComboBox arrivoComboBox;
   private JPanel selectionPanel;
   private JPanel partenzaArrivoPanel;
   private JPanel searchPanel;
   private JLabel changeLabel;
   private JComboBox changeComboBox;
   private JButton searchButton;
   private JPanel outputPanel;
   private JTextArea outputArea;
   
   public MainFrame()
   {
      super();
      this.routeCalculator = new FullRouteCalculator();
      initGUI();
   }
   
   public void initGUI()
   {
      this.setLayout(new BorderLayout());
      
      Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
      this.setSize(screenSize.width/2, screenSize.height/2);
      this.setLocation((int)(screenSize.width - getWidth()) / 2, (int)(screenSize.height - this.getHeight())/2);
      this.setVisible(true);
      this.setDefaultCloseOperation(EXIT_ON_CLOSE);
      
      selectionPanel = new JPanel();
      selectionPanel.setLayout(new GridLayout(2, 1));
      {
         partenzaArrivoPanel = new JPanel();
         FlowLayout layout = new FlowLayout();
         layout.setHgap(15);
         partenzaArrivoPanel.setLayout(layout);
         {
            partenzaLabel = new JLabel("Partenza: ");
            partenzaComboBox = new JComboBox();
            partenzaArrivoPanel.add(partenzaLabel);
            partenzaArrivoPanel.add(partenzaComboBox);

            arrivoLabel = new JLabel("Arrivo: ");
            arrivoComboBox = new JComboBox();
            partenzaArrivoPanel.add(arrivoLabel);
            partenzaArrivoPanel.add(arrivoComboBox);
            
            changeLabel = new JLabel("Cambi: ");
            changeComboBox = new JComboBox();
            changeComboBox.addItem("0");
            changeComboBox.addItem("1");
            changeComboBox.addItem("2");
            changeComboBox.addItem("3");
            partenzaArrivoPanel.add(changeLabel);
            partenzaArrivoPanel.add(changeComboBox);
         }
         
         populateComboBoxes();
         
         searchPanel = new JPanel();
         searchPanel.setLayout(new FlowLayout());
         {
            searchButton = new JButton("Cerca");
            searchButton.addActionListener(this);
            searchPanel.add(searchButton);
         }
      }
      selectionPanel.add(partenzaArrivoPanel);
      selectionPanel.add(searchPanel);
      
      outputPanel = new JPanel();
      outputArea = new JTextArea(50, 100);
      outputPanel.add(outputArea);

      this.getContentPane().add(selectionPanel, BorderLayout.NORTH);
      this.getContentPane().add(outputPanel, BorderLayout.WEST);
   }
      
   public void populateComboBoxes()
   {
      StopFactory factory = StopFactory.getInstance();
      for(String a : factory.getStopsNames())
      {
         partenzaComboBox.addItem(a);
      }
      for(String a : factory.getStopsNames())
      {
         arrivoComboBox.addItem(a);
      }
   }
   
   public void actionPerformed(ActionEvent e)
   {
      if(e.getSource() == searchButton)
      {
         try
         {
            ArrayList<Route> routeSet = routeCalculator.calculate(partenzaComboBox.getSelectedItem().toString(), arrivoComboBox.getSelectedItem().toString(), Integer.parseInt((String)changeComboBox.getSelectedItem()));
            for(Route a : routeSet)
            {
               outputArea.append(a.toString());
               outputArea.append("\n");
            }
         }
         catch(Exception ex)
         {}
      }
   }

}


Vado a ricordi vaghi, prova a mettere il setVisible(true), dopo aver caricato tutto il contenuto. Quindi come ultima istruzione di initGui.
rock
Avatar utente
d4z_c0nf
Packager
Packager
 
Messaggi: 1293
Iscritto il: mar mar 14, 2006 18:07
Località: Salerno
Nome Cognome: Rocco Aliberti
Slackware: 14.1-64bit
Kernel: 3.10.17
Desktop: xfce

Re: [JAVA] Contentuto Frame compare solo se ridimensionata

Messaggioda neongen » gio giu 18, 2009 17:18

d4z_c0nf ha scritto:Vado a ricordi vaghi, prova a mettere il setVisible(true), dopo aver caricato tutto il contenuto. Quindi come ultima istruzione di initGui.
rock

giusto: setVisible(true) nel codice sopra è messo invece prima di inizializzare il contenuto del frame, per questo ti fa vedere una finestra vuota.

edit: io personalmente non lo metto quasi mai dentro il codice del frame; preferisco da fuori

Codice: Seleziona tutto
MioFrame f = new MioFrame();
f.setVisible(true);
Avatar utente
neongen
Packager
Packager
 
Messaggi: 825
Iscritto il: ven mag 25, 2007 11:37
Nome Cognome: Enrico
Slackware: 14.0_64
Kernel: 3.4.4
Desktop: KDE 4.5.5
Distribuzione: Maemo 5

Re: [JAVA] Contentuto Frame compare solo se ridimensionata

Messaggioda m0rdr3d » gio giu 18, 2009 17:30

Lo scopo di setVisible è quello di mostrare la finestra solo al termine della sua costruzione, ed evitare che venga mostrata un pezzo alla volta.
Di fatto richiamare il metodo e poi aggiungere altre cose al frame non ha molto senso.
Dovrebbe essere l'ultima invocazione o, come ti è stato suggerito, essere richiamato all'esterno del codice di inizializzazione.
Avatar utente
m0rdr3d
Linux 2.4
Linux 2.4
 
Messaggi: 404
Iscritto il: dom dic 24, 2006 13:40
Slackware: Slackware64-current
Kernel: 3.4.*
Desktop: KDE 4.8.2

Re: [JAVA] Contentuto Frame compare solo se ridimensionata

Messaggioda ulisse89 » gio giu 18, 2009 18:17

Ho capito ragazzi. Non lo sapevo anche perchè la grafica di java ci è stata spiegata in una lezione. Grazie mille.
Avatar utente
ulisse89
Packager
Packager
 
Messaggi: 644
Iscritto il: sab gen 17, 2009 12:53
Località: Bologna
Nome Cognome: Riccardo
Slackware: 13.0
Kernel: 2.6.29.6
Desktop: Xfce

Re: [JAVA] Contentuto Frame compare solo se ridimensionata

Messaggioda m0rdr3d » gio giu 18, 2009 18:40

ulisse89 ha scritto:Non lo sapevo anche perchè la grafica di java ci è stata spiegata in una lezione.

Sì, purtroppo è uno scenario che conosco :D
Avatar utente
m0rdr3d
Linux 2.4
Linux 2.4
 
Messaggi: 404
Iscritto il: dom dic 24, 2006 13:40
Slackware: Slackware64-current
Kernel: 3.4.*
Desktop: KDE 4.8.2


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti