Pagina 1 di 1

[Java] Refresh dei componenti

Inviato: venerdì 27 giugno 2008, 14:59
da Berghem
non capisco il perchè spesso ho problemi nel refresh dei componenti, nel mio esempio costruisco un calendario, quando dal combobox seleziono il mese che voglio visualizzare, il calendario viene visto, ma mancano gli ultimi giorni del mese.....

posto immagini e codice

Codice: Seleziona tutto

private void InitComponent(){
		pnlGenerale = new JPanel();
		pnlGenerale.setLayout(null);
		
		cmbMese = new JComboBox();
		cmbMese.setSize(120,30);
		cmbMese.setLocation(10,10);
		
		pnlGenerale.add(cmbMese);
		cmbMese.removeAllItems();
		for (int i=1;i<13;i++){
			cmbMese.addItem(i);
		}
		
		cmbMese.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
            	cmbMeseClick(evt);
            }
        });
		this.add(pnlGenerale);
		
		calendario = new MonthCalendarImpl();
		calendario.setSize(800,800);
		calendario.setLocation(10,50);
		pnlGenerale.add(calendario);		
	}
	
	private void cmbMeseClick(java.awt.event.ItemEvent evt){
		int liMese;
		liMese = cmbMese.getSelectedIndex();
		calendario.setMonth(liMese);
	}

Re: [Java] Refresh dei componenti

Inviato: lunedì 30 giugno 2008, 15:21
da Berghem
Qualcuno potrebbe spiegarmi come potrei fare (visto che non riesco a risolvere il mio problema) a distruggere il componente (solo se non è istanziato) e a ricrearlo?

Re: [Java] Refresh dei componenti

Inviato: lunedì 30 giugno 2008, 15:28
da mokup
Quando aggiorni il pannello prova a chiamare:

pnlGenerale.repaint()

Re: [Java] Refresh dei componenti

Inviato: lunedì 30 giugno 2008, 15:32
da Berghem
Ho provato ma nulla... ho provato sia sul pannello che sul calendario, vedo solo una parte del mese...
e non capisco il perchè... >:(

Venendo dalla programmazione Delphi farei una cosa del genere

if calendario nil then
  calendario.free;

e poi lo ricreo...

non sarebbe ottimale, ma almeno funzionerebbe...

Re: [Java] Refresh dei componenti

Inviato: lunedì 30 giugno 2008, 15:38
da mokup

Re: [Java] Refresh dei componenti

Inviato: lunedì 30 giugno 2008, 15:55
da Berghem
ok, forse ho sistemato ()...
Mi sai dire perchè quando cambio la scelta del combobox entra 2 volte (me ne sono accorto in debug) nella funzione cmbMeseClick?

Codice: Seleziona tutto

public class DatePicker extends JFrame {
	JPanel pnlGenerale;
	JComboBox cmbMese;
	MonthCalendarImpl calendario;
	Date data;
	public DatePicker() {
        super();
		
		this.setTitle("date");
		this.setPreferredSize(new Dimension(1000,200));
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		pnlGenerale = new JPanel();
		pnlGenerale.setLayout(null);
		this.add(pnlGenerale);
		
		InitComponent(0);
		
		pack();
		setVisible(true);
	}

	/**
	 * @param args
	 */
	
	private void InitComponent(int liMese){
		cmbMese = new JComboBox();
		cmbMese.setSize(120,30);
		cmbMese.setLocation(10,10);
		
		pnlGenerale.add(cmbMese);
		cmbMese.removeAllItems();
		for (int i=1;i<13;i++){
			cmbMese.addItem(i);
		}
		
		cmbMese.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
            	cmbMeseClick(evt);
            }
        });
		
		calendario = new MonthCalendarImpl(2008,liMese);
		calendario.setSize(800,800);
		calendario.setLocation(10,50);
		pnlGenerale.add(calendario);
	}

	public String dateToString (Date dateFormat, String format) {
			if (dateFormat==null) 
				return null;
			SimpleDateFormat formatter = new SimpleDateFormat(format);
			return formatter.format(dateFormat);
		}
	
	private void cmbMeseClick(java.awt.event.ItemEvent evt){
		int liMese;
		liMese = cmbMese.getSelectedIndex();
		pnlGenerale.removeAll();
		InitComponent(liMese+1);		
		
		pnlGenerale.repaint();
		pnlGenerale.validate();
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		DatePicker pippo = new DatePicker(); 
		

	}
}

Re: [Java] Refresh dei componenti

Inviato: martedì 1 luglio 2008, 10:24
da Berghem
nulkla da fare... continua a mostrarmi solo una parte del calendario...