Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    Istanziare un oggetto JPanel in un JTabbedPane

    Salve, ho un piccolo dilemma, ho creato una classe di tipo JTabbedPane(funzionante) e per ogni scheda ho utilizzato il metodo addTab(..., component) per aggiungere un componente ad ogni scheda. Nel mio caso volevo aggiungere un JPanel e ci sono riuscito. A un certo punto però ho pensato di creare una classe a parte di tipo JPanel e istanziare poi nella classe JTabbedPane un oggetto del tipo precedente(JPanel "personalizzato") ma non me lo disegna. Ecco il codice del JTabbedPane
    codice:
    public static void main( String args[] )
           { 
            TabbedPane tabbedPaneFrame = new TabbedPane();  
              tabbedPaneFrame.setVisible( true ); // display frame
           } // end main 
        
        
       // set up GUI
       public TabbedPane()
       {
           super( "JTabbedPane" );
    
           JTabbedPane tabbedPane = new JTabbedPane(); // create JTabbedPane 
           setTitle("Index Frame");
           setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
           setBounds(100, 100, 450, 300);
           
           // set up pane11 and add it to JTabbedPane 
           //e qui ci sono i settaggi del panel1
    .............
    ...........
    tabbedPane.addTab( "Login", null, panel1, "Login Panel" );
    Se il codice di panel1 lo inserisco in un altra classe, e istanzio poi quella classe in JTabbedPane, panel1 non me lo disegna.

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da AssassinCruel Visualizza il messaggio
    Se il codice di panel1 lo inserisco in un altra classe, e istanzio poi quella classe in JTabbedPane, panel1 non me lo disegna.
    Dal codice intuisco che il tuo TabbedPane è un JFrame (non l'hai precisato ma ok). Nel costruttore istanzi un JTabbedPane, ok. Poi la invocazione a addTab è corretta. Ma il JTabbedPane dove è inserito?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Dal codice intuisco che il tuo TabbedPane è un JFrame (non l'hai precisato ma ok). Nel costruttore istanzi un JTabbedPane, ok. Poi la invocazione a addTab è corretta. Ma il JTabbedPane dove è inserito?
    Si è vero scusami non sono stato preciso nella descrizione. Comunque avevo saltato una riga di codice, che è quella che effettivamente aggiunge il tabbedPane al frame.
    Dopo aver definito tutti i tab
    codice:
     getContentPane().add( tabbedPane );
    Il JTabbedPane sarebbe il frame diciamo
    Ultima modifica di AssassinCruel; 03-05-2014 a 15:13

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Bisognerebbe capire cosa è e fa quel panel1. L'unica cosa certa al momento è che il JTabbedPane è nella parte CENTER del BorderLayout nel content-pane e il frame viene visualizzato.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    il codice di panel1 sarebbe questo:
    codice:
    panel1.setBorder(new EmptyBorder(5, 5, 5, 5));
                   panel1.setLayout(null);
            
                   txtUsername = new JTextField();
                   txtUsername.setBounds(177, 60, 89, 20);
                   panel1.add(txtUsername);
                   txtUsername.setColumns(10);
            
                   Label label = new Label("Username");
                   label.setBounds(177, 32, 62, 22);
                   panel1.add(label);
            
                   Label label_1 = new Label("Password");
                   label_1.setBounds(177, 93, 62, 22);
                   panel1.add(label_1);
            
                   passwordField = new JPasswordField();
                   passwordField.setBounds(177, 121, 89, 20);
                   panel1.add(passwordField);
    io tutto quel codice vorrei riscriverlo in un altra classe e istanziarla poi nella classe del JTabbedPane.
    Io ho creato una nuova classe di nome LoginPanel e nella classe del JTabbedPane ho scritto:
    codice:
    LoginPanel panel1 = new LoginPanel();
    addTab(...., panel1);
    Però panel1 non lo disegna....

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Mi spiace ma dal solo codice postato non riesce a notare qualcosa che è palesemente errato.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    codice:
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.awt.Label;
    
    import javax.swing.JFrame;
    import javax.swing.JTabbedPane;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JButton;
    import javax.swing.SwingConstants;
    import javax.swing.border.EmptyBorder;
    import javax.swing.JTextField;
    import javax.swing.JPasswordField;
    
    public class TabbedPane extends JFrame {
        
        private static final long serialVersionUID = 1L;
        private JPanel panel1;
        private JTextField txtUsername;
        private JPasswordField passwordField;
        private String username;
        private JLabel exceptionLabel;
        
        public static void main( String args[] )
           { 
            TabbedPane tabbedPaneFrame = new TabbedPane();  
              tabbedPaneFrame.setVisible( true ); // display frame
           } // end main 
        
        
       // set up GUI
       public TabbedPane()
       {
           super( "JTabbedPane" );
    
           JTabbedPane tabbedPane = new JTabbedPane(); // create JTabbedPane 
           setTitle("Index Frame");
           setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
           setBounds(100, 100, 450, 300);
           
           // set up pane11 and add it to JTabbedPane 
                   JLabel label1 = new JLabel( "Login", SwingConstants.CENTER );
    
                   panel1 = new JPanel();
                   panel1.setBorder(new EmptyBorder(5, 5, 5, 5));
                   panel1.setLayout(null);
            
                   txtUsername = new JTextField();
                   txtUsername.setBounds(177, 60, 89, 20);
                   panel1.add(txtUsername);
                   txtUsername.setColumns(10);
            
                   Label label = new Label("Username");
                   label.setBounds(177, 32, 62, 22);
                   panel1.add(label);
            
                   Label label_1 = new Label("Password");
                   label_1.setBounds(177, 93, 62, 22);
                   panel1.add(label_1);
            
                   passwordField = new JPasswordField();
                   passwordField.setBounds(177, 121, 89, 20);
                   panel1.add(passwordField);
            
                   JButton btnLogin = new JButton("Sign In");
            
                   btnLogin.setBounds(177, 162, 89, 23);
                   panel1.add(btnLogin);
            
                   exceptionLabel = new JLabel("");
                   exceptionLabel.setBounds(175, 183, 181, 14);
                   panel1.add(exceptionLabel);
                   panel1.add( label1 ); // add label to panel
                   tabbedPane.addTab( "Login", null, panel1, "Login Panel" ); 
          
          // set up panel2 and add it to JTabbedPane
          JLabel label2 = new JLabel( "panel two", SwingConstants.CENTER );
          JPanel panel2 = new JPanel(); // create second panel
          panel2.setBackground( Color.YELLOW ); // set background to yellow
          panel2.add( label2 ); // add label to panel
          tabbedPane.addTab( "Tab Two", null, panel2, "Second Panel" ); 
    
          getContentPane().add( tabbedPane ); // add JTabbedPane to frame
       } // end JTabbedPaneFrame constructor
    } // end class JTabbedPaneFrame
    Questo è il codice per intero della classe TabbedPane
    La parte che si trova tra "//set up pane11 and add it to JTabbedPane " e "// set up panel2 and add it to JTabbedPane", che gli dice come deve disegnare panel1, io voglio scriverla in un altra classe eliminando quindi quella parte di codice presente nella classe TabbedPane.

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Il tuo codice completo compila ... l'ho anche provato e vedo i due tab (uno con il form di login e l'altro giallo).
    Alcune cose sarebbero da migliorare e altre da evitare ma per il resto non vedo nulla di palesemente errato.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Scusa forse non mi sono spiegato bene D: Il codice va bene(nel senso che lo compila ) però io la parte di codice che dice come disegnare panel1 vorrei scriverla in un altra classe di nome LoginPanel. Dopodichè al posto di:
    codice:
    // set up pane11 and add it to JTabbedPane 
                   JLabel label1 = new JLabel( "Login", SwingConstants.CENTER );
    
                   panel1 = new JPanel();
                   panel1.setBorder(new EmptyBorder(5, 5, 5, 5));
                   panel1.setLayout(null);
            
                   txtUsername = new JTextField();
                   txtUsername.setBounds(177, 60, 89, 20);
                   panel1.add(txtUsername);
                   txtUsername.setColumns(10);
            
                   Label label = new Label("Username");
                   label.setBounds(177, 32, 62, 22);
                   panel1.add(label);
            
                   Label label_1 = new Label("Password");
                   label_1.setBounds(177, 93, 62, 22);
                   panel1.add(label_1);
            
                   passwordField = new JPasswordField();
                   passwordField.setBounds(177, 121, 89, 20);
                   panel1.add(passwordField);
            
                   JButton btnLogin = new JButton("Sign In");
            
                   btnLogin.setBounds(177, 162, 89, 23);
                   panel1.add(btnLogin);
            
                   exceptionLabel = new JLabel("");
                   exceptionLabel.setBounds(175, 183, 181, 14);
                   panel1.add(exceptionLabel);
                   panel1.add( label1 ); // add label to panel
    ci inserisco:
    codice:
    LoginPanel panel1 = new LoginPanel();
    tabbedPane.addTab( "Login", null, panel1, "Login Panel" );
    Così facendo però panel1 non lo disegna più

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da AssassinCruel Visualizza il messaggio
    Scusa forse non mi sono spiegato bene D: Il codice va bene(nel senso che lo compila ) però io la parte di codice che dice come disegnare panel1 vorrei scriverla in un altra classe di nome LoginPanel.
    Ok, allora crea un'altra classe come hai appena detto, cioè LoginPanel, che estende JPanel. Mettici i campi di istanza per i vari componenti (quali/quanti ti servono poi in seguito), nel costruttore istanzia i componenti e crea la interfaccia grafica come hai fatto.

    Ovviamente in LoginPanel è già un JPanel ... non devi più fare panel1 = new JPanel();
    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.