Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it L'avatar di salcam
    Registrato dal
    Dec 2005
    Messaggi
    193

    [JAVA] Stranezza JTabbedPane

    Salve, ho un problema non facile da esporre. Ci provo.

    Allora io ho fatto un programmino java che prevede un JTabbedPane con 4 tab. In questi tab ho aggiunto delle icone in formato jpg. Ad ogni tab associo una pannello con i vari oggetti. In uno dei pannelli ho due JButton ai quali ho associato come evento la stampa a video di una stringa. Il problema è che quando clicco sul bottone non succede niente; se subito dopo invece clicco su una parte vuota del frame mi compare la stringa. STRANO NO?

    Quello che ho notato è che se metto delle gif animate nel tab al posto delle immagini jpg, funziona perfettamente!!!

    Qualcuno sa darmi una spiegazione?

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    160
    probabilmente è un problema di refresh.
    Subito dopo la stampa a video metti questa riga.
    codice:
    repaint();
    Probabilmente con la gif funziona perchè si refresha automaticamente d ogni frame della gif. Cliccando su un punto vuoto forzi il repaint.

  3. #3
    Utente di HTML.it L'avatar di salcam
    Registrato dal
    Dec 2005
    Messaggi
    193
    niente

    Qualcosa la fa. Infatti forse sbaglio a posizionare repaint();

    Siccome il cambiamento del pannello è associato ad un pulsante, il repaint lo messo alla fine dell'actionPerformed.

    Grazie ancora

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    160
    beh così è difficile aiutarti, metti un pò di codice, magari solo la parte interessante, tanto per capire come lo stai implementando

  5. #5
    Utente di HTML.it L'avatar di salcam
    Registrato dal
    Dec 2005
    Messaggi
    193
    Qui sto allegando la parte del layout per il pannello relativo ai clienti (Pogramma gestionale):
    codice:
    Box bh1=Box.createHorizontalBox();
    		bh1.add(insCliente);
    		bh1.add(visCliente);
    		bh1.setBorder(BorderFactory.createTitledBorder("Area Clienti"));
    		final Box bv2=Box.createVerticalBox();
    		insCliente.addActionListener(new ActionListener(){
    			public void actionPerformed(ActionEvent e){
    				Component comp[]=bv2.getComponents();
    				int count=bv2.getComponentCount();
    				for(int i=0;i<count;i++){
    					bv2.remove(comp[i]);
    				}
    				Box bhNome=Box.createHorizontalBox();
    				bhNome.add(nomeLab);
    				bhNome.add(nomeTf);
    				Box bhCognome=Box.createHorizontalBox();
    				bhCognome.add(cognomeLab);
    				bhCognome.add(cognomeTf);
    				Box bhIndirizzo=Box.createHorizontalBox();
    				bhIndirizzo.add(indirizzoLab);
    				bhIndirizzo.add(indirizzoTf);
    				Box bhCittà=Box.createHorizontalBox();
    				bhCittà.add(cittàLab);
    				bhCittà.add(cittàTf);
    				Box bhTel=Box.createHorizontalBox();
    				bhTel.add(telLab);
    				bhTel.add(telTf);
    				Box bhCell=Box.createHorizontalBox();
    				bhCell.add(cellLab);
    				bhCell.add(cellTf);
    				Box bhFax=Box.createHorizontalBox();
    				bhFax.add(faxLab);
    				bhFax.add(faxTf);
    				Box bhCodFisc=Box.createHorizontalBox();
    				bhCodFisc.add(codFiscLab);
    				bhCodFisc.add(codFiscTf);
    				Box bhPartIva=Box.createHorizontalBox();
    				bhPartIva.add(partIvaLab);
    				bhPartIva.add(partIvaTf);
    				bv2.add(Box.createVerticalStrut(10));
    				bv2.add(bhNome);
    				bv2.add(Box.createVerticalStrut(10));
    				bv2.add(bhCognome);
    				bv2.add(Box.createVerticalStrut(10));
    				bv2.add(bhIndirizzo);
    				bv2.add(Box.createVerticalStrut(10));
    				bv2.add(bhCittà);
    				bv2.add(Box.createVerticalStrut(10));
    				bv2.add(bhTel);
    				bv2.add(Box.createVerticalStrut(10));
    				bv2.add(bhCell);
    				bv2.add(Box.createVerticalStrut(10));
    				bv2.add(bhFax);
    				bv2.add(Box.createVerticalStrut(10));
    				bv2.add(bhCodFisc);
    				bv2.add(Box.createVerticalStrut(10));
    				bv2.add(bhPartIva);
    				bv2.add(Box.createVerticalStrut(10));
    				bv2.setBorder(BorderFactory.createTitledBorder("Compila i campi"));
    				memCliente.addActionListener(new ActionListener(){
    					public void actionPerformed(ActionEvent a){
    						Database db=new Database("lormad","root","");
    						if(db.connetti()){
    							String query="INSERT into Clienti VALUES ('"+nomeTf.getText()+"','"+
    									cognomeTf.getText()+"','"+indirizzoTf.getText()+"','"+
    									cittàTf.getText()+"','"+telTf.getText()+"','"+
    									cellTf.getText()+"','"+faxTf.getText()+"','"+
    									codFiscTf.getText()+"','"+partIvaTf.getText()+"')";
    							db.eseguiInserimento(query);
    						}
    					}
    				});
    				bv2.add(memCliente);
    			}
    		});
    		visCliente.addActionListener(new ActionListener(){
    			public void actionPerformed(ActionEvent e){
    				Component comp[]=bv2.getComponents();
    				int count=bv2.getComponentCount();
    				for(int i=0;i<count;i++){
    					bv2.remove(comp[i]);
    				}
    			}
    		});
    		Box bv1=Box.createVerticalBox();
    		bv1.add(bh1);
    		bv1.add(Box.createVerticalStrut(20));
    		bv1.add(bv2);
    		add(bv1);
    Il JTabbedPane è in una classe a parte che si occupa semplicemente di inizializzare i tab con i relativi pannelli e le immagini:

    codice:
    public TabPanel(){
    		clientiPanel=new ClientiPanel();
    		tb=new JTabbedPane();
    		tb.setBorder(BorderFactory.createLineBorder(Color.black));
    		setLayout(new BorderLayout()); 
    	    setBorder(BorderFactory.createEmptyBorder(3,4,3,4)); 
    	    tb.addTab("Clienti",new ImageIcon("Clienti.jpg"),clientiPanel);
    	    tb.addTab("Fornitori",new ImageIcon("Fornitori.jpg"),null);
    	    tb.addTab("Magazzino",new ImageIcon("Magazzino.jpg"),null);
    	    tb.addTab("Fatture",new ImageIcon("Fatture.jpg"),null);
    	    add(BorderLayout.CENTER,tb);
    	}

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    160
    ...In uno dei pannelli ho due JButton ai quali ho associato come evento la stampa a video di una stringa....
    intendevo questa con "parte interessante"...non capisco a cosa può servire questa parte del layout :master:

    la stampa a video avviene sul pannello se ho capito bene giusto? hai fatto l'override del metodo paint? qual è il punto in cui avviene la stampa a video, e qual è il bottone che la dovrebbe generare?

  7. #7
    Utente di HTML.it L'avatar di salcam
    Registrato dal
    Dec 2005
    Messaggi
    193
    la stampa a video avviene all'interno di insCliente.addActionListener(). Quei Box che vedi sono tutti per gestire il Layout. La stampa avviene aggiungengo all'ultimo dei Box, i box precedenti.

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    160
    ok sorry, non lo avevo capito.
    Quindi ad ogni click ricrei l'intera struttura e la aggiungi al pannello di base...
    anch'io il repaint() l'avrei messo alla fine dell'aciotn listener, dopo questa linea:
    codice:
    bv2.add(memCliente);
    boh... aspetta altri pareri magari...

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    e un validate() sul container che vai a modificare no?
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  10. #10
    Utente di HTML.it L'avatar di salcam
    Registrato dal
    Dec 2005
    Messaggi
    193
    Grazie mille a entrambi.

    Ho risolto con il consiglio di Andrea1979, cioè utilizzando validate alla fine dall'action Listener:

    codice:
    ...
    bv2.add(memCliente);
    bv2.validate();
    Grazie ancora

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 © 2025 vBulletin Solutions, Inc. All rights reserved.