Visualizzazione dei risultati da 1 a 8 su 8

Discussione: Problema TabbedPane

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    115

    Problema TabbedPane

    ciao ragazzi devo aggiungere un aggetto Pannello ad un ad una delle schede del TabbedPane
    il problema e che non mi visualizza l'oggetto inserito...
    codice:
    import javax.swing.*;
    import javax.swing.event.ChangeEvent;
    import javax.swing.event.ChangeListener;
    
    
    
    public class PannelloSchede extends JFrame implements ChangeListener {
    	
    
    	private JTabbedPane tabbedPane;
    	JFrame tmp;
    	public static final int DEFAULT_WIDTH = 600;
       	public static final int DEFAULT_HEIGHT = 400;
       	private ButtonPrestazioniPanel prova;
       	
    	public PannelloSchede(){
    		
    		prova=new ButtonPrestazioniPanel();
    		tmp=new JFrame("Progettazione");
    	    tmp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	    tmp.setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
    	    tmp.setVisible(true);
    	    
    	    
    		tabbedPane=new JTabbedPane();
    		tabbedPane.add("Dati Generali",null);
    		tabbedPane.add("Prestazioni",null);
    		tabbedPane.add("Dati Aggiuntivi",null);
    		tabbedPane.add("Parametri",null);
    		tabbedPane.add("Calcolo",null);
    		tabbedPane.addChangeListener(this);
    		tmp.add(prova);
    		tmp.add(tabbedPane, "Center");
    		
    		loadTab(0);
    	}
    	
    	
    	public void stateChanged(ChangeEvent event){
    		
    		int n = tabbedPane.getSelectedIndex();
    		loadTab(n);
            
    		
    	}
    	public static void main(String[] args) {
    		PannelloSchede m=new PannelloSchede();
    		
    
    	}
    	private void loadTab(int n)
    	   {
    	      String title = tabbedPane.getTitleAt(n);
    	      
    	      if(title.equals("Prestazioni")){
    	    	  tabbedPane.setComponentAt(n,prova);
    	      }
    	     	      
    	   }
    
    
    
    }
    l'oggetto da aggiungere e questo:
    codice:
    public class ButtonPrestazioniPanel extends JPanel implements ActionListener {
    
    	private JButton progettazione, sicurezza, rilieviPlanoaltimetrici, rilieviManufatti,impattiAmbietali,pianoParticellareEspropio,supportoResponsabileDelProcedimento;
    	ProgettazioneFrame progettazioneframe;
    	ButtonChek progettazioneBc, sicurezzaBc, rilieviPlanoaltimetriciBc, rilieviManufattiBc,impattiAmbietaliBc,pianoParticellareEspropioBc,supportoResponsabileDelProcedimentoBc;
    	JPanel insiemePrestazioni;
    	
    	//JFrame tmp;
    	public static final int DEFAULT_WIDTH = 600;
       	public static final int DEFAULT_HEIGHT = 400;
    	
    	public ButtonPrestazioniPanel(){
    		
    		//tmp=new JFrame("Progettazione");
    		//tmp.setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
    		
    		progettazione=new JButton("progettazione");
    		sicurezza=new JButton("sicurezza");
    		rilieviPlanoaltimetrici=new JButton("rilievi Planoaltimetrici");
    		rilieviManufatti=new JButton("rilievi Manufatti");
    		impattiAmbietali=new JButton("impattiAmbietali");
    		pianoParticellareEspropio=new JButton("piano Particellare Espropio");
    		supportoResponsabileDelProcedimento=new JButton("supporto Responsabile Del Procedimento");
    		
    		progettazione.addActionListener(this);
    		sicurezza.addActionListener(this);
    		rilieviPlanoaltimetrici.addActionListener(this);
    		rilieviManufatti.addActionListener(this);
    		impattiAmbietali.addActionListener(this);
    		pianoParticellareEspropio.addActionListener(this);
    		supportoResponsabileDelProcedimento.addActionListener(this);
    		
    		progettazioneBc= new ButtonChek(progettazione);
    		sicurezzaBc= new ButtonChek(sicurezza);
    		rilieviPlanoaltimetriciBc= new ButtonChek(rilieviPlanoaltimetrici);
    		rilieviManufattiBc= new ButtonChek(rilieviManufatti);
    		impattiAmbietaliBc= new ButtonChek(impattiAmbietali);
    		pianoParticellareEspropioBc= new ButtonChek(pianoParticellareEspropio);
    		supportoResponsabileDelProcedimentoBc= new ButtonChek(supportoResponsabileDelProcedimento);
    		
    		insiemePrestazioni=new JPanel();
    		
    		
    		JPanel insiemeBottoni2=new JPanel();
    		JPanel insiemeBottoni=new JPanel();
    		insiemeBottoni.setLayout(new GridLayout(7,1));
    		insiemeBottoni.add(progettazioneBc);
    		insiemeBottoni.add(sicurezzaBc);
    		insiemeBottoni.add(rilieviPlanoaltimetriciBc);
    		insiemeBottoni.add(rilieviManufattiBc);
    		insiemeBottoni.add(impattiAmbietaliBc);
    		insiemeBottoni.add(pianoParticellareEspropioBc);
    		insiemeBottoni.add(supportoResponsabileDelProcedimentoBc);
    		
    		insiemePrestazioni.setLayout(new GridLayout(1,2));
    		insiemePrestazioni.add(insiemeBottoni);
    		insiemePrestazioni.add(insiemeBottoni2);
    				
    		//tmp.setVisible(true);
    		//tmp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		//tmp.add(insiemePrestazioni);
    	}
    	
    
    	public void actionPerformed(ActionEvent e){
    		if(e.getSource()==progettazione){
    			progettazioneframe=new ProgettazioneFrame(this,new Logica());
    		}
    	}
    	
    	public void finish(){
    		double valueA=progettazioneframe.getValueA();
    		double valueB=progettazioneframe.getValueB();
    		double valueB1=progettazioneframe.getValueB1();
    		System.out.println("value="+valueA);
    		System.out.println("value="+valueB);
    		System.out.println("value="+valueB1);
    	}
    	
    	
    	
    	
    
    }
    non riesco a capire dove e l'errore..ripeto devo aggiungere l'oggetto ButtonPrestazioniPanel alla classe PannelloSchede

    grazie tantissimo per l'aiuto

  2. #2
    Utente di HTML.it L'avatar di @DI3GO@
    Registrato dal
    Nov 2008
    Messaggi
    537
    Allora.....se ho capito bene vuoi aggiungere ad ogni tabbed la classe grafica ButtonPrestazioniPanel?

    Se è così:

    Nella funzione di
    add( String , Component ) ,
    non devi dichiarare
    add( "titolo", null ),
    ma mettere
    add( "titolo" , prova );

    In questo modo aggiungi un pannello al tuo tabbed pane.

    Altrimenti, se vuoi aggiungere la classe grafica alla finestra, fuori dal tabbed pane, devi aggiungere un layout e poi aggiungere al frame la classe grafica.

    Ora però mi viene un dubbio....
    Non sei la prima persona che scrive
    codice:
    [...]
    public class PannelloSchede extends JFrame implements ChangeListener {
    	
    
    	private JTabbedPane tabbedPane;
    	JFrame tmp;
    	public static final int DEFAULT_WIDTH = 600;
       	public static final int DEFAULT_HEIGHT = 400;
       	private ButtonPrestazioniPanel prova;
       	
    	public PannelloSchede(){
    		
    		prova=new ButtonPrestazioniPanel();
    		tmp=new JFrame("Progettazione");
    	    tmp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	    tmp.setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
    	    tmp.setVisible(true);
    
    [...]
    public static void main(String[] args) {
    		PannelloSchede m=new PannelloSchede();
    		
    
    	}
    [...]
    Ma scusa ( scusate perchè chiedo conferma ), in questo modo non vengono istanziate due classi Frame?
    Tra l'altro perfettamente inutile come cosa, è solo un'occupazione di memoria.
    Che poi effettivamente a video compaio solo una ( in quanto solo una viene resa visibile ( temp )), ma l'altra Frame c'è ed esiste.
    Se si estende la classe frame e la si valorizza graficamente, poi la si visualizza, è a tutti gli effetti una Frame.
    Non capisco perchè viene fatta una cosa simile, e non sei la prima persona che lo fa...non capisco se è una incomprensione della logica OOP oppure è qualcuno che vi spiega male...o se di vostra iniziativa avete trovato qualcuno che vi potrebbe spiegare il perchè non si deve fare così ( per meglio dire, si può e ci sono casi molto particolari e che poi siamo in tanti che vi possono dire perchè non si deve fare e cos aè giusto fare... )

    Scusate OT....però è doveroso, in quanto ripeto non sei il primo e la cosa ha iniziato a destarmi dubbi ed i sospetti sopra citati.
    Nipote: persona incompetente, con le soli doti di "copia/incolla" e la creazione automatica di siti internet ed interfaccie grafiche.Compie lavori apparentemente qualificati e richiesta una modifica sparisce in quatemala con i pochi soldi ottenuti.[...] Fonte la Diegonzelli

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    115

    humm

    ho provato a fare cosi
    add( "titolo" , prova ); gia ieri... e non va....non capisco perche...poi ho capito che ci stanno 2 frame pero il libro con cui sto studianto che spiega questa soluzione...effettivamente ci stanno 2 frame...pero non ho capito l'oggetto TabbedPane se non l'aggiungo ad un frame come potrei visualizzarlo...magari non lo visuliazzo perche mi appare nel frame sbagliato... possibile???
    cmq add("titolo",prova) non va....

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Problema TabbedPane

    Originariamente inviato da cobraa
    ciao ragazzi devo aggiungere un aggetto Pannello ad un ad una delle schede del TabbedPane
    il problema e che non mi visualizza l'oggetto inserito...
    codice:
    public class PannelloSchede extends JFrame implements ChangeListener {
    	private JTabbedPane tabbedPane;
    	JFrame tmp;
    	public static final int DEFAULT_WIDTH = 600;
       	public static final int DEFAULT_HEIGHT = 400;
       	private ButtonPrestazioniPanel prova;
       	
    	public PannelloSchede(){
    		
    		prova=new ButtonPrestazioniPanel();
    		tmp=new JFrame("Progettazione");
    	    tmp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	    tmp.setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
    	    tmp.setVisible(true);
    Beh, allora innanzitutto spiegami perché la tua classe PannelloSchede estende JFrame (quindi è un frame!) ma poi nel costruttore istanzi un altro JFrame .... che ti serve??? È già l'oggetto PannelloSchede un frame! Usa quello no?

    Poi:
    tmp.add(prova);
    tmp.add(tabbedPane, "Center");

    Un JFrame per default usa il layout manager BorderLayout. Se non si specifica un constraint (come nella prima riga) il default è la parte CENTER. Sotto hai specificato "Center" (e nota, è preferibile se metti BorderLayout.CENTER) ma in ogni caso va nella stessa area di prima!! In ognuna delle 5 aree del BorderLayout viene visualizzato solo 1 componente!!

    E vedo che 'prova' è un ButtonPrestazioniPanel che vuoi inserire nel tabbed pane .... ma allora perché lo aggiungi anche al frame con tmp.add(prova)???

    E perché fai tutto quel giro strano: prima inserisci dei tab con Component null e poi implementi un ChangeListener e imposti un componente nel tab in base al titolo dall'indice???
    Se non si devono fare cose particolari o complesse, basta mettere subito tutti i tab con i componenti e lasciare al JTabbedPane il compito di switchare da uno all'altro!!

    Insomma .... per prima cosa chiarisciti bene le idee sul "design" (sia visivo che strutturale delle classi) che vuoi realizzare e per cortesia, documentati molto bene sulla documentazione javadoc ufficiale:
    http://java.sun.com/javase/6/docs/api/

    e anche sul tutorial ufficiale:
    http://java.sun.com/docs/books/tutorial/
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    115
    codice:
    public PannelloSchede(){
    		
    		prova=new ButtonPrestazioniPanel();
    	    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	    setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
    	    setVisible(true);
    	    
    		tabbedPane=new JTabbedPane();
    		tabbedPane.add("Dati Generali",null);
    		tabbedPane.add("Prestazioni",null);
    		tabbedPane.add("Dati Aggiuntivi",null);
    		tabbedPane.add("Parametri",null);
    		tabbedPane.add("Calcolo",null);
    		tabbedPane.addChangeListener(this);
    		add(tabbedPane, "Center");
    		loadTab(0);
    	}
    ora va meglio....si effettivamente erano 2....pero sempre non si vede ora....se riuscissi solo con la documentazione di certo non scriverei nel forum....

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da cobraa
    se riuscissi solo con la documentazione di certo non scriverei nel forum....
    Allora ti spiace provare questo semplicissimo esempio che ho scritto al volo??

    codice:
    import java.awt.*;
    import javax.swing.*;
    
    public class FramePrincipale extends JFrame {
        private JTabbedPane tabbedPane;
    
        public FramePrincipale() {
            super("Frame");
    
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setSize(300, 300);
    
            tabbedPane = new JTabbedPane();
            tabbedPane.addTab("Primo", new Pannello1());
            tabbedPane.addTab("Secondo", new Pannello2());
    
            getContentPane().add(tabbedPane, BorderLayout.CENTER);
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    FramePrincipale f = new FramePrincipale();
                    f.setVisible(true);
                }
            });
        }
    }
    
    class Pannello1 extends JPanel {
        public Pannello1() {
            add(new JLabel("Questo e` il primo pannello"));
        }
    }
    
    class Pannello2 extends JPanel {
        public Pannello2() {
            add(new JLabel("Questo e` il secondo pannello"));
        }
    }
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    115
    si effettivamente è una programmazione molto piu snella...senza dubbio..anche se il main non l'ho capito tanto bene...cmq...anche in quello che ho creato il se volessi aggiungere il Pannello1 che hai appena creato me lo visulizza...se aggiungo pero quello mio non mi va...cmq adesso mi ci metto con piu attenzione vediamo cosa ne esce fuori...

    grazie dell'aiuto...fra un po faro sapere il mio risultato ^_^

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da cobraa
    anche se il main non l'ho capito tanto bene
    Allora devi ancora comprendere bene come funziona Swing per quanto riguarda i thread. Ti suggerisco di leggere l'articolo Threads and Swing
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.