Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
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
Il JTabbedPane sarebbe il frame diciamocodice:getContentPane().add( tabbedPane );
Ultima modifica di AssassinCruel; 03-05-2014 a 15:13
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.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
il codice di panel1 sarebbe questo:
io tutto quel codice vorrei riscriverlo in un altra classe e istanziarla poi nella classe del JTabbedPane.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 ho creato una nuova classe di nome LoginPanel e nella classe del JTabbedPane ho scritto:
Però panel1 non lo disegna....codice:LoginPanel panel1 = new LoginPanel(); addTab(...., panel1);
Mi spiace ma dal solo codice postato non riesce a notare qualcosa che è palesemente errato.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Questo è il codice per intero della classe TabbedPanecodice: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
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.
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.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
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:
ci inserisco: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
Così facendo però panel1 non lo disegna piùcodice:LoginPanel panel1 = new LoginPanel(); tabbedPane.addTab( "Login", null, panel1, "Login Panel" );![]()
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.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet