GUI mit Swing [gelöst]



  • Hi...

    Muss für die Uni ein Program mit Swing-Oberfläche entwickeln,
    komm aber irgendwie nicht weiter.

    Werde mal versuchen mein Problem zu schildern.

    Ich habe eine Haupt-Klasse die von JFrame abgeleitet ist, diese
    enthält ein JPanel mit einem CardLayout.

    Desweiteren habe mehrere Klassen die von JPanel abgeleitet sind,
    diese füge ich in der Haupt-Klasse dem CardLayout hinzu, das klapp
    auch alles wunderbar.

    Mein Problem ist jetzt das ich gern über Knöpfe in den von JPanel
    abgeleiteten Klassen das CardLayout aus der Haupt-Klasse ändern
    würde, doch leider weiß ich nicht wie ich das am Besten anstellen
    soll.

    Hoffe einer von euch kann mir einen Tip geben.

    Hier nun mal meine Haupt-Klasse und eine der anderen, habe an der
    Stelle an der ich nicht weiter weiß ein Kommentar eingefügt.

    Die Haupt-Klasse:

    package ergo;
    
    import javax.swing.SwingUtilities;
    import javax.swing.JPanel;
    import javax.swing.JFrame;
    import java.awt.Rectangle;
    import java.awt.CardLayout;
    
    public class Main extends JFrame {
    
    	private static final long serialVersionUID = 1L;
    
    	private JPanel jContentPane = null;
    	private CardLayout jCardLayout = null;
    
    	public static void main(String[] args) {
    		SwingUtilities.invokeLater(new Runnable() {
    			public void run() {
    				Main thisClass = new Main();
    				thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    				thisClass.setVisible(true);
    			}
    		});
    	}
    
    	public Main() {
    		super();
    		initialize();
    	}
    
    	private void initialize() {
    		this.setContentPane(getJContentPane());
    		this.setTitle("Mentor-System");
    		this.setName("mainFrame");
    		this.setBounds(new Rectangle(0, 0, 560, 430));
    	}
    
    	private JPanel getJContentPane() {
    		if (jContentPane == null) {
    			jContentPane = new JPanel();
    			jCardLayout = new CardLayout();
    			jContentPane.setLayout(jCardLayout);
    			jContentPane.add(new Login(),"loginPane");
    			jContentPane.add(new std_EmailAendern(), "std_Pane01");
    		}
    		return jContentPane;
    	}
    
    }
    

    eine der anderen Klassen:

    package ergo;
    
    import javax.swing.JPanel;
    import java.awt.Rectangle;
    import java.awt.Color;
    import javax.swing.JButton;
    
    public class Login extends JPanel {
    
    	private static final long serialVersionUID = 1L;
    	private JButton btn_login = null;
    
    	public Login() {
    		super();
    		initialize();
    	}
    
    	private void initialize() {
    		this.setLayout(null);
    		this.setBounds(new Rectangle(0, 0, 550, 400));
    		this.setBackground(Color.white);
    		this.add(getBtn_login(), null);
    	}
    
    	private JButton getBtn_login() {
    		if (btn_login == null) {
    			btn_login = new JButton();
    			btn_login.setBounds(new Rectangle(427, 366, 110, 22));
    			btn_login.addActionListener(new java.awt.event.ActionListener() {
    				public void actionPerformed(java.awt.event.ActionEvent e) {
                       //Hier würde ich gern das CardLayout aus der Haupt-Klasse ändern
                       //mit jCardLayout.show(jContentPane, "std_Pane01");
                       //habe aber keinen Zugriff auf die variablen???
                       //Wie mach ich das???
    				}
    			});
    		}
    		return btn_login;
    	}
    
    }
    


  • Vielleicht was in die Richtung?

    public class Main{
       ...
    
      public void showPanel( String id ){
        jCardLayout.show( jContentPane, id );
      }
    }
    
    public class Login{
      private Main main;
      ...
    
      public Login( Main main ){
        this.main = main;
        ...
      }
    
       ...
      public void actionPerformed( ... ){
        main.showPanel( "std_Pane01" );
      }
    }
    


  • Vielen vielen Dank,

    hätte ich eigentlich auch selber drauf kommen können,
    aber bin noch nicht so Fit mit Java, und war mir nicht
    sicher ob das funktioniert.

    Also nochmal vielen, vielen dank hast mir sehr weiter geholfen.


Anmelden zum Antworten