# JFrame in JFrame öffnen



## yax (20. Jun 2010)

Hallo,

ich bin grad dabei mir einen Kalender zu schreiben. Ich habe bis jetzt 2 Klassen, einmal Juni und einmal Juli. Wie kann ich dann, wenn ich Juni auf habe, und auf den Button witer drücke, Juli im selbem Frame öffnen?

Gruß Yax.

PS: Ich hoffe das ihr mir schnell Antworten könnt.


----------



## L-ectron-X (20. Jun 2010)

Entweder du entfernst den aktuellen Inhalt (JPanel) und fügst neuen ein oder du arbeitest mit CardLayout (eleganter).


----------



## yax (20. Jun 2010)

Danke für die schnelle Antwort,


aber ich verstehe das mit dem JPanel nicht. (Ich bin totaler Anfänger)


----------



## L-ectron-X (20. Jun 2010)

Ich kann dir auch nicht mehr sagen, weil ich nicht weiß, wie du dein Fenster aufgebaut hast.
Minimaler Input erzeugt nicht zwangsläufig auch eine zufriedenstellende Antwort...


----------



## yax (20. Jun 2010)

Vielleicht hilft dir das ja weiter mir zu helfen 

Klasse Juni:

```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 20.06.2010
  * @author
  */

public class Juni2010 extends JFrame {
  // Anfang Attribute
   JFrame jFrame = new JFrame();
   JPanel jPanel1 = new JPanel(null);
     JButton jButton1 = new JButton();
     JButton jButton2 = new JButton();
     JButton jButton3 = new JButton();
     JButton jButton4 = new JButton();
     JButton jButton5 = new JButton();
     JButton jButton6 = new JButton();
     JButton jButton7 = new JButton();
     JButton jButton8 = new JButton();
     JButton jButton9 = new JButton();
     JButton jButton10 = new JButton();
     JButton jButton11 = new JButton();
     JButton jButton12 = new JButton();
     JButton jButton13 = new JButton();
     JButton jButton14 = new JButton();
     JButton jButton15 = new JButton();
     JButton jButton16 = new JButton();
     JButton jButton17 = new JButton();
     JButton jButton18 = new JButton();
     JButton jButton19 = new JButton();
     JButton jButton20 = new JButton();
     JButton jButton21 = new JButton();
     JButton jButton22 = new JButton();
     JButton jButton23 = new JButton();
     JButton jButton24 = new JButton();
     JButton jButton25 = new JButton();
     JButton jButton26 = new JButton();
     JButton jButton27 = new JButton();
     JButton jButton28 = new JButton();
     JButton jButton29 = new JButton();
     JButton jButton30 = new JButton();
     JButton jButton31 = new JButton();
     JButton jButton32 = new JButton();
     JButton jButton33 = new JButton();
     JLabel jLabel1 = new JLabel();
     JLabel jLabel2 = new JLabel();
     JLabel jLabel3 = new JLabel();
     JLabel jLabel4 = new JLabel();
     JLabel jLabel5 = new JLabel();
     JLabel jLabel6 = new JLabel();
     JLabel jLabel7 = new JLabel();
  // Ende Attribute

  public Juni2010(String title) {
    // Frame-Initialisierung
    super(title);
    jFrame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    int frameWidth = 550;
    int frameHeight = 380;
    jFrame.setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    jFrame.setLocation(x, y);


    jFrame.setLayout(null);

    // Anfang Komponenten
    jFrame.add(jPanel1);
    jPanel1.setBounds(32, 8, 481, 321);

    jButton1.setBounds(88, 112, 57, 33);
    jButton1.setText("1");

    jPanel1.add(jButton1);
    jButton2.setBounds(152, 112, 59, 33);
    jButton2.setText("2");

    jPanel1.add(jButton2);
    jButton3.setBounds(216, 112, 57, 33);
    jButton3.setText("3");

    jPanel1.add(jButton3);
    jButton4.setBounds(280, 112, 57, 33);
    jButton4.setText("4");

    jPanel1.add(jButton4);
    jButton5.setBounds(344, 112, 57, 33);
    jButton5.setText("5");

    jPanel1.add(jButton5);
    jButton6.setBounds(408, 112, 57, 33);
    jButton6.setText("6");

    jPanel1.add(jButton6);
    jButton7.setBounds(152, 152, 57, 33);
    jButton7.setText("7");

    jPanel1.add(jButton7);
    jButton8.setBounds(88, 152, 57, 33);
    jButton8.setText("8");

    jPanel1.add(jButton8);
    jButton9.setBounds(24, 152, 57, 33);
    jButton9.setText("9");

    jPanel1.add(jButton9);
    jButton10.setBounds(216, 152, 57, 33);
    jButton10.setText("10");

    jPanel1.add(jButton10);
    jButton11.setBounds(280, 152, 57, 33);
    jButton11.setText("11");

    jPanel1.add(jButton11);
    jButton12.setBounds(344, 152, 57, 33);
    jButton12.setText("12");

    jPanel1.add(jButton12);
    jButton13.setBounds(408, 152, 57, 33);
    jButton13.setText("13");

    jPanel1.add(jButton13);
    jButton14.setBounds(24, 192, 57, 33);
    jButton14.setText("14");

    jPanel1.add(jButton14);
    jButton15.setBounds(88, 192, 57, 33);
    jButton15.setText("15");

    jPanel1.add(jButton15);
    jButton16.setBounds(152, 192, 57, 33);
    jButton16.setText("16");

    jPanel1.add(jButton16);
    jButton17.setBounds(216, 192, 57, 33);
    jButton17.setText("17");

    jPanel1.add(jButton17);
    jButton18.setBounds(280, 192, 57, 33);
    jButton18.setText("18");

    jPanel1.add(jButton18);
    jButton19.setBounds(344, 192, 57, 33);
    jButton19.setText("19");

    jPanel1.add(jButton19);
    jButton20.setBounds(408, 192, 57, 33);
    jButton20.setText("20");

    jPanel1.add(jButton20);
    jButton21.setBounds(24, 232, 57, 33);
    jButton21.setText("21");

    jPanel1.add(jButton21);
    jButton22.setBounds(88, 232, 57, 33);
    jButton22.setText("22");

    jPanel1.add(jButton22);
    jButton23.setBounds(152, 232, 57, 33);
    jButton23.setText("23");

    jPanel1.add(jButton23);
    jButton24.setBounds(216, 232, 57, 33);
    jButton24.setText("24");

    jPanel1.add(jButton24);
    jButton25.setBounds(280, 232, 57, 33);
    jButton25.setText("25");

    jPanel1.add(jButton25);
    jButton26.setBounds(344, 232, 57, 33);
    jButton26.setText("26");

    jPanel1.add(jButton26);
    jButton27.setBounds(408, 232, 57, 33);
    jButton27.setText("27");

    jPanel1.add(jButton27);
    jButton28.setBounds(24, 272, 57, 33);
    jButton28.setText("28");

    jPanel1.add(jButton28);
    jButton29.setBounds(88, 272, 57, 33);
    jButton29.setText("29");

    jPanel1.add(jButton29);
    jButton30.setBounds(152, 272, 57, 33);
    jButton30.setText("30");

    jPanel1.add(jButton30);
    jButton31.setBounds(152, 32, 169, 33);
    jButton31.setText("Juni 2010");

    jPanel1.add(jButton31);
    jButton32.setBounds(328, 32, 57, 33);
    jButton32.setText(">>");
    jButton32.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        jButton32_ActionPerformed(evt);
      }
    });
    jPanel1.add(jButton32);
    jButton33.setBounds(88, 32, 57, 33);
    jButton33.setText("<<");
    jButton33.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        jButton33_ActionPerformed(evt);
      }
    });
    jPanel1.add(jButton33);
    jLabel1.setBounds(32, 88, 22, 16);
    jLabel1.setText("Mo");
    jLabel1.setFont(new Font("MS Sans Serif", Font.BOLD, 13));
    jPanel1.add(jLabel1);
    jLabel2.setBounds(96, 88, 16, 16);
    jLabel2.setText("Di");
    jLabel2.setFont(new Font("MS Sans Serif", Font.BOLD, 13));
    jPanel1.add(jLabel2);
    jLabel3.setBounds(160, 88, 17, 16);
    jLabel3.setText("Mi");
    jLabel3.setFont(new Font("MS Sans Serif", Font.BOLD, 13));
    jPanel1.add(jLabel3);
    jLabel4.setBounds(224, 88, 21, 16);
    jLabel4.setText("Do");
    jLabel4.setFont(new Font("MS Sans Serif", Font.BOLD, 13));
    jPanel1.add(jLabel4);
    jLabel5.setBounds(288, 88, 15, 16);
    jLabel5.setText("Fr");
    jLabel5.setFont(new Font("MS Sans Serif", Font.BOLD, 13));
    jPanel1.add(jLabel5);
    jLabel6.setBounds(352, 88, 20, 16);
    jLabel6.setText("Sa");
    jLabel6.setFont(new Font("MS Sans Serif", Font.BOLD, 13));
    jPanel1.add(jLabel6);
    jLabel7.setBounds(416, 88, 20, 16);
    jLabel7.setText("So");
    jLabel7.setFont(new Font("MS Sans Serif", Font.BOLD, 13));
    jPanel1.add(jLabel7);
    // Ende Komponenten

    jFrame.setResizable(true);
    jFrame.setVisible(true);
  }

  // Anfang Methoden
  public void jButton32_ActionPerformed(ActionEvent evt) {
     Juli2010 j = new Juli2010("");


  }

  public void jButton33_ActionPerformed(ActionEvent evt) {
    // TODO hier Quelltext einfügen
  }

  // Ende Methoden

  public static void main(String[] args) {
    new Juni2010("Juni2010");
  }
}
```

Klasse Juni:

```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 20.06.2010
  * @author
  */

public class Juli2010 extends JFrame {
  // Anfang Attribute
  JFrame jFrame1 = new JFrame();
  JPanel jPanel1 = new JPanel(null);
     JButton jButton1 = new JButton();
     JButton jButton2 = new JButton();
     JButton jButton3 = new JButton();
     JButton jButton4 = new JButton();
     JButton jButton5 = new JButton();
     JButton jButton6 = new JButton();
     JButton jButton7 = new JButton();
     JButton jButton8 = new JButton();
     JButton jButton9 = new JButton();
     JButton jButton10 = new JButton();
     JButton jButton11 = new JButton();
     JButton jButton12 = new JButton();
     JButton jButton13 = new JButton();
     JButton jButton14 = new JButton();
     JButton jButton15 = new JButton();
     JButton jButton16 = new JButton();
     JButton jButton17 = new JButton();
     JButton jButton18 = new JButton();
     JButton jButton19 = new JButton();
     JButton jButton20 = new JButton();
     JButton jButton21 = new JButton();
     JButton jButton22 = new JButton();
     JButton jButton23 = new JButton();
     JButton jButton24 = new JButton();
     JButton jButton25 = new JButton();
     JButton jButton26 = new JButton();
     JButton jButton27 = new JButton();
     JButton jButton28 = new JButton();
     JButton jButton29 = new JButton();
     JButton jButton30 = new JButton();
     JButton jButton31 = new JButton();
     JButton jButton32 = new JButton();
     JButton jButton33 = new JButton();
     JButton jButton34 = new JButton();
     JLabel jLabel1 = new JLabel();
     JLabel jLabel2 = new JLabel();
     JLabel jLabel3 = new JLabel();
     JLabel jLabel4 = new JLabel();
     JLabel jLabel5 = new JLabel();
     JLabel jLabel6 = new JLabel();
     JLabel jLabel7 = new JLabel();
  // Ende Attribute

  public Juli2010(String title) {
    // Frame-Initialisierung
    super(title);
    jFrame1.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    int frameWidth = 550;
    int frameHeight = 380;
    jFrame1.setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    jFrame1.setLocation(x, y);
    jFrame1.setLayout(null);
    // Anfang Komponenten


    jFrame1.add(jPanel1);

    jPanel1.setBounds(32, 8, 481, 321);
    jFrame1.add(jPanel1);
    jButton1.setBounds(216, 112, 59, 33);
    jButton1.setText("1");

    jPanel1.add(jButton1);
    jButton2.setBounds(280, 112, 57, 33);
    jButton2.setText("2");

    jPanel1.add(jButton2);
    jButton3.setBounds(344, 112, 57, 33);
    jButton3.setText("3");

    jPanel1.add(jButton3);
    jButton4.setBounds(408, 112, 57, 33);
    jButton4.setText("4");

    jPanel1.add(jButton4);
    jButton5.setBounds(24, 152, 57, 33);
    jButton5.setText("5");

    jPanel1.add(jButton5);
    jButton6.setBounds(88, 152, 57, 33);
    jButton6.setText("6");

    jPanel1.add(jButton6);
    jButton7.setBounds(152, 152, 57, 33);
    jButton7.setText("7");

    jPanel1.add(jButton7);
    jButton8.setBounds(216, 152, 57, 33);
    jButton8.setText("8");

    jPanel1.add(jButton8);
    jButton9.setBounds(280, 152, 57, 33);
    jButton9.setText("9");

    jPanel1.add(jButton9);
    jButton10.setBounds(344, 152, 57, 33);
    jButton10.setText("10");

    jPanel1.add(jButton10);
    jButton11.setBounds(408, 152, 57, 33);
    jButton11.setText("11");

    jPanel1.add(jButton11);
    jButton12.setBounds(24, 192, 57, 33);
    jButton12.setText("12");

    jPanel1.add(jButton12);
    jButton13.setBounds(88, 192, 57, 33);
    jButton13.setText("13");

    jPanel1.add(jButton13);
    jButton14.setBounds(152, 192, 57, 33);
    jButton14.setText("14");

    jPanel1.add(jButton14);
    jButton15.setBounds(216, 192, 57, 33);
    jButton15.setText("15");

    jPanel1.add(jButton15);
    jButton16.setBounds(280, 192, 57, 33);
    jButton16.setText("16");

    jPanel1.add(jButton16);
    jButton17.setBounds(344, 192, 57, 33);
    jButton17.setText("17");

    jPanel1.add(jButton17);
    jButton18.setBounds(408, 192, 57, 33);
    jButton18.setText("18");

    jPanel1.add(jButton18);
    jButton19.setBounds(24, 232, 57, 33);
    jButton19.setText("19");

    jPanel1.add(jButton19);
    jButton20.setBounds(88, 232, 57, 33);
    jButton20.setText("20");

    jPanel1.add(jButton20);
    jButton21.setBounds(152, 232, 57, 33);
    jButton21.setText("21");

    jPanel1.add(jButton21);
    jButton22.setBounds(216, 232, 57, 33);
    jButton22.setText("22");

    jPanel1.add(jButton22);
    jButton23.setBounds(280, 232, 57, 33);
    jButton23.setText("23");

    jPanel1.add(jButton23);
    jButton24.setBounds(344, 232, 57, 33);
    jButton24.setText("24");

    jPanel1.add(jButton24);
    jButton25.setBounds(408, 232, 57, 33);
    jButton25.setText("25");

    jPanel1.add(jButton25);
    jButton26.setBounds(24, 272, 59, 33);
    jButton26.setText("26");

    jPanel1.add(jButton26);
    jButton27.setBounds(88, 272, 57, 33);
    jButton27.setText("27");

    jPanel1.add(jButton27);
    jButton28.setBounds(152, 272, 57, 33);
    jButton28.setText("28");

    jPanel1.add(jButton28);
    jButton29.setBounds(216, 272, 57, 33);
    jButton29.setText("29");

    jPanel1.add(jButton29);
    jButton30.setBounds(280, 272, 57, 33);
    jButton30.setText("30");

    jPanel1.add(jButton30);
    jButton31.setBounds(344, 272, 57, 33);
    jButton31.setText("31");

    jPanel1.add(jButton31);
    jButton32.setBounds(169, 33, 152, 32);
    jButton32.setText("Juli 2010");
    jButton32.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        jButton32_ActionPerformed(evt);
      }
    });
    jPanel1.add(jButton32);
    jButton33.setBounds(328, 33, 57, 32);
    jButton33.setText(">>");
    jButton33.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        jButton33_ActionPerformed(evt);
      }
    });
    jPanel1.add(jButton33);
    jButton34.setBounds(105, 33, 57, 32);
    jButton34.setText("<<");
    jButton34.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        jButton34_ActionPerformed(evt);
      }
    });
    jPanel1.add(jButton34);
    jLabel1.setBounds(224, 88, 21, 16);
    jLabel1.setText("Do");
    jLabel1.setFont(new Font("MS Sans Serif", Font.BOLD, 13));
    jPanel1.add(jLabel1);
    jLabel2.setBounds(288, 88, 15, 16);
    jLabel2.setText("Fr");
    jLabel2.setFont(new Font("MS Sans Serif", Font.BOLD, 13));
    jPanel1.add(jLabel2);
    jLabel3.setBounds(352, 88, 20, 16);
    jLabel3.setText("Sa");
    jLabel3.setFont(new Font("MS Sans Serif", Font.BOLD, 13));
    jPanel1.add(jLabel3);
    jLabel4.setBounds(416, 88, 20, 16);
    jLabel4.setText("So");
    jLabel4.setFont(new Font("MS Sans Serif", Font.BOLD, 13));
    jPanel1.add(jLabel4);
    jLabel5.setBounds(160, 88, 17, 16);
    jLabel5.setText("Mi");
    jLabel5.setFont(new Font("MS Sans Serif", Font.BOLD, 13));
    jPanel1.add(jLabel5);
    jLabel6.setBounds(96, 88, 16, 16);
    jLabel6.setText("Di");
    jLabel6.setFont(new Font("MS Sans Serif", Font.BOLD, 13));
    jPanel1.add(jLabel6);
    jLabel7.setBounds(32, 88, 22, 16);
    jLabel7.setText("Mo");
    jLabel7.setFont(new Font("MS Sans Serif", Font.BOLD, 13));
    jPanel1.add(jLabel7);
    // Ende Komponenten

    jFrame1.setResizable(true);
    jFrame1.setVisible(true);

  }

  // Anfang Methoden



  public void jButton32_ActionPerformed(ActionEvent evt) {
    // TODO hier Quelltext einfügen
  }

  public void jButton33_ActionPerformed(ActionEvent evt) {
    // TODO hier Quelltext einfügen
  }

  public void jButton34_ActionPerformed(ActionEvent evt) {
    // TODO hier Quelltext einfügen
  }

  // Ende Methoden

  public static void main(String[] args) {
    new Juli2010("Juli2010");
  }
}
```

So, ich möchte jetzt wenn ich Juni öffne, und auf weiter klicke, dass dann Juni im selbem Fenster erscheint.


----------



## L-ectron-X (20. Jun 2010)

Zur Zeit ist es so, dass du zwei JFrames gebaut hast. Diese JFrames stellen jeder für sich ein selbstständiges Programm dar, würden also beide (je nach Aufruf) eine eigene VM starten.

Eine Anwendung sollte immer nur einen JFrame haben. GUI-Elemente sollten auf JPanels angeordnet werden. Man kann auch JPanels verschachteln. LayoutManager helfen beim Anordnen der Komponenten.

Zum Austausch von Inhalten (JPanels) kann man mit dem CardLayout recht komfortabel arbeiten.
Da solltest du dich einarbeiten. Speziell in die Benutzung von LayoutManagern. Das "NullLayout" ist fast immer eine schlechte Lösung.


----------



## Eldorado (20. Jun 2010)

Vielleicht eine kleine Info vorweg: Benutze einen Layoutmanager um deine Gui zu gestalten. Das spart dir später viele Probleme und Zeit. Es erfordert zwar etwas Arbeit in der Einarbeitung ist aber für eine gute Gui unumgänglich.
mfg
Eldorado

Edit: *mal wieder zu langsam*


----------



## yax (21. Jun 2010)

Okay ich habe das jetzt schon seit 2 stunden mit dem CardLayout ausprobiert, ich hab alles gelesen, aber wie immer bekomme ich es nicht hin. !!!

Kann mir vielleicht jemand nochmal ausführlich die anwendund des CardLayouts erklären??


----------



## Michael... (21. Jun 2010)

How to Use CardLayout
Oder hier ein bisschen DemoCode

```
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class CardLayoutDemo extends JFrame implements ActionListener {
	private CardLayout layout;
	
	public CardLayoutDemo() {
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setBounds(0, 0, 500, 300);
		this.setLocationRelativeTo(null);
		
		layout = new CardLayout();
		this.getContentPane().setLayout(layout);
		this.getContentPane().add("CARDONE", new CardOne(this));
		this.getContentPane().add("CARDTWO", new CardTwo(this));
		this.getContentPane().add("CARDTHREE", new CardThree(this));
		this.getContentPane().add("CARDTWOSUB", new CardTwoSub(this));
	}
	
	public static void main(String[] args) {
		new CardLayoutDemo().setVisible(true);
	}

	public void actionPerformed(ActionEvent evt) {
		flipCard(evt.getActionCommand());
	}
	
	private void flipCard(String name) {
		System.out.println(name);
		layout.show(this.getContentPane(), name);
	}
}

class CardOne extends JPanel {
	public CardOne(ActionListener listener) {
		this.setLayout(new BorderLayout());
		
		JButton button = new JButton("Weiter");
		button.setActionCommand("CARDTWO");
		button.addActionListener(listener);
		this.add(button, BorderLayout.EAST);
		
		this.add(new JLabel(this.getClass().getName(), JLabel.CENTER), BorderLayout.CENTER);
	}
}

class CardTwo extends JPanel {
	public CardTwo(ActionListener listener) {
		this.setLayout(new BorderLayout());
		
		JButton button = new JButton("Weiter");
		button.setActionCommand("CARDTHREE");
		button.addActionListener(listener);
		this.add(button, BorderLayout.EAST);
		
		button = new JButton("Zurück");
		button.setActionCommand("CARDONE");
		button.addActionListener(listener);
		this.add(button, BorderLayout.WEST);
		
		button = new JButton("Runter");
		button.setActionCommand("CARDTWOSUB");
		button.addActionListener(listener);
		this.add(button, BorderLayout.SOUTH);
		
		this.add(new JLabel(this.getClass().getName(), JLabel.CENTER), BorderLayout.CENTER);
	}
}

class CardTwoSub extends JPanel {
	public CardTwoSub(ActionListener listener) {
		this.setLayout(new BorderLayout());
		
		JButton button = new JButton("Zurück");
		button.setActionCommand("CARDTWO");
		button.addActionListener(listener);
		this.add(button, BorderLayout.NORTH);
		
		this.add(new JLabel(this.getClass().getName(), JLabel.CENTER), BorderLayout.CENTER);
	}
}

class CardThree extends JPanel {
	public CardThree(ActionListener listener) {
		this.setLayout(new BorderLayout());
		
		JButton button = new JButton("Ende");
		button.setActionCommand("CARDONE");
		button.addActionListener(listener);
		this.add(button, BorderLayout.EAST);
		
		button = new JButton("Zurück");
		button.setActionCommand("CARDTWO");
		button.addActionListener(listener);
		this.add(button, BorderLayout.WEST);
		
		this.add(new JLabel(this.getClass().getName(), JLabel.CENTER), BorderLayout.CENTER);
	}
}
```


----------



## yax (21. Jun 2010)

Es tut mir sehr leid, aber ich versteh es einfach nicht. -_-

Gibt es denn nicht noch eine andere elegante (und auch einfachere) Lösung??

Ich bin echt am verzweifeln.


----------



## Michael... (22. Jun 2010)

yax hat gesagt.:


> Gibt es denn nicht noch eine andere elegante (und auch einfachere) Lösung??


Man könnte das ganze richtig programmieren ;-)

Du kannst doch die zwei Panels die Du in den beiden Klassen mit den Komponenten befüllst auf eine Kompontene mit einem CardLayout einfügen. In dem Code Bsp ist ja dann aufgezeigt wie man dann von einer "Ansicht" zur nächsten wechselt --> mittels Aufruf von show(Elternkomponente, Elementname) am LayoutManager.


----------



## L-ectron-X (22. Jun 2010)

Ich hatte mal vor einiger Zeit in diesem Thread eine Vorlage gepostet: http://www.java-forum.org/awt-swing-swt/33130-cardlayout-quiz.html


----------



## yax (22. Jun 2010)

So ich habe jetzt versucht ein eigenen kleinen CardLayout-Versuch gemacht, doch irgendetwas ist daran falsch. ABER ich weiß einfach nicht was .

Code1:

```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 22.06.2010
  * @author
  */

public class Kalender extends JFrame {
  // Anfang Attribute
  JPanel haupt;
  JPanel card;
  JLabel l1;
  JLabel l2;
  JButton next;
  private kalendert k = new kalendert("");
  private CardLayout cards;
  // Ende Attribute

  public Kalender(String title) {
    // Frame-Initialisierung
    super(title);
    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    setSize(500, 400);
    setLocationRelativeTo(null);


    // Anfang Komponenten
    haupt = new JPanel(new BorderLayout());
    haupt.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
    
    next = new JButton("Weiter");
    next.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            cards.next(card);
         }
      });


    l1 = new JLabel("HI");


    cards = new CardLayout();
    card = new JPanel(cards);
    card.setBorder(BorderFactory.createEmptyBorder(20,0,0,0));

    card.add(k);

    haupt.add(next,BorderLayout.EAST);
    haupt.add(card, BorderLayout.CENTER);
    add(haupt, BorderLayout.CENTER);
    // Ende Komponenten

    setResizable(false);
    setVisible(true);
  }

  // Anfang Methoden
  // Ende Methoden

  public static void main(String[] args) {
    try {
         UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
      }
      catch(Exception e) {}

    new Kalender("Kalender");
  }
}
```

code2:

```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 22.06.2010
  * @author
  */

public class kalendert extends Panel {
  // Anfang Attribute
  JLabel l1 = new JLabel("HelloHello");
  // Ende Attribute

  public kalendert(String Title) {

    setLayout(new BorderLayout());
    
    JPanel panel = new JPanel(new GridLayout(0, 1));
      panel.setBorder(BorderFactory.createEmptyBorder(0, 60, 30, 20));
      
    add(l1);

  }

  // Anfang Methoden
  // Ende Methoden

  public static void main(String[] args) {
    new kalendert("kalendert");
  }
}
```


----------



## yax (22. Jun 2010)

Oh ich hab selber den Fehler gefunden. Ich hätte bei 


```
card.add(k);
```

das schreiben müssen :

```
card.add(k, BorderLayout.SOUTH);
```


aber vielen vielen Dank an eure guten Tipps und Danke für die viele Geduld 

Gruß yax.


----------



## yax (23. Jun 2010)

Heey,

ich hab jetzt noch zum Inhaltlichen eine Frage, wie kann ich bei den Folgenden Code Juli, eine überschrift "Juli 2010" machen. Also so dass sie alleine an oberster stelle steht (über den Tagen). ???

Juli:

```
import javax.swing.*;
import java.awt.*;

public class juli extends JPanel{
  JLabel juli = new JLabel("Juli 2010");
  JLabel nix = new JLabel("      ");
  JLabel mo = new JLabel("  Montag");
  JLabel di = new JLabel("Dienstag");
  JLabel mi = new JLabel("  Mittwoch");
  private JLabel don = new JLabel("Donnerstag");
  JLabel fr = new JLabel("   Freitag");
  JLabel sa = new JLabel("Samstag");
  JLabel so = new JLabel("Sonntag");
  JLabel nix2 = new JLabel("     ");
  JLabel nix3 = new JLabel("     ");
  JButton b1 = new JButton("1");
  JButton b2 = new JButton("2");
  JButton b3 = new JButton("3");
  JButton b4 = new JButton("4");
  JButton b5 = new JButton("5");
  JButton b6 = new JButton("6");
  JButton b7 = new JButton("7");
  JButton b8 = new JButton("8");
  JButton b9 = new JButton("9");
  JButton b10 = new JButton("10");
  JButton b11 = new JButton("11");
  JButton b12 = new JButton("12");
  JButton b13 = new JButton("13");
  JButton b14 = new JButton("14");
  JButton b15 = new JButton("15");
  JButton b16 = new JButton("16");
  JButton b17 = new JButton("17");
  JButton b18 = new JButton("18");
  JButton b19 = new JButton("19");
  JButton b20 = new JButton("20");
  JButton b21 = new JButton("21");
  JButton b22 = new JButton("22");
  JButton b23 = new JButton("23");
  JButton b24 = new JButton("24");
  JButton b25 = new JButton("25");
  JButton b26 = new JButton("26");
  JButton b27 = new JButton("27");
  JButton b28 = new JButton("28");
  JButton b29 = new JButton("29");
  JButton b30 = new JButton("30");
  JButton b31 = new JButton("31");
  public juli(){
    setLayout(new BorderLayout());

    JPanel panel = new JPanel( new GridLayout(6,30));
     panel.setBorder(BorderFactory.createEmptyBorder());
     panel.setOpaque( false );

    panel.add(mo);
    panel.add(di);
    panel.add(mi);
    panel.add(don);
    panel.add(fr);
    panel.add(sa);
    panel.add(so);
    panel.add(nix);
    panel.add(nix2);
    panel.add(nix3);
    panel.add(b1);
    panel.add(b2);
    panel.add(b3);
    panel.add(b4);
    panel.add(b5);
    panel.add(b6);
    panel.add(b7);
    panel.add(b8);
    panel.add(b9);
    panel.add(b10);
    panel.add(b11);
    panel.add(b12);
    panel.add(b13);
    panel.add(b14);
    panel.add(b15);
    panel.add(b16);
    panel.add(b17);
    panel.add(b18);
    panel.add(b19);
    panel.add(b20);
    panel.add(b21);
    panel.add(b22);
    panel.add(b23);
    panel.add(b24);
    panel.add(b25);
    panel.add(b26);
    panel.add(b27);
    panel.add(b28);
    panel.add(b29);
    panel.add(b30);
    panel.add(b31);

    add(panel, BorderLayout.CENTER);


  }
}
```

Hier die dazugehörige Klasse um das programm Anzuzeigen:

```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 22.06.2010
  * @author
  */

public class Kalender extends JFrame {


  // Anfang Attribute
  private CardLayout cards = new CardLayout();
  private JPanel main = new JPanel(new BorderLayout());
  private JPanel monate = new JPanel(cards);
  private JButton weiter = new JButton(">>");
  private JButton zurück = new JButton("<<");
  private juni la;
  private juli jl;
  // Ende Attribute

  public Kalender(String title) {
    // Frame-Initialisierung
    super(title);
    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    setLocationRelativeTo(null);
    setSize(600,400);
    

    main.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
    
    weiter.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            cards.next(monate);
         }
      });
      
    zurück.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            cards.previous(monate);
         }
      });

    monate.setBorder(BorderFactory.createEtchedBorder());

    la = new juni();
    jl = new juli();

    monate.add(la, BorderLayout.NORTH);
    monate.add(jl, BorderLayout.NORTH);
    main.add(weiter, BorderLayout.EAST);
    main.add(zurück, BorderLayout.WEST);
    main.add(monate, BorderLayout.CENTER);
    add(main, BorderLayout.CENTER);
    // Anfang Komponenten

    // Ende Komponenten

    setResizable(false);
    setVisible(true);
  }

  // Anfang Methoden
  // Ende Methoden

  public static void main(String[] args) {
     try {
         UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
      }
      catch(Exception e) {}


    new Kalender("Kalender");
  }
}
```

Ich bitte um eine schnelle Hilfe.


----------



## Eldorado (23. Jun 2010)

Erstmal vorweg ein "kleiner" Tipp um Quellcode zu vermindern: Du kannst Buttons genauso wie alle anderen Objekten in Arrays packen. Du kannst dann über schleifen Button erstellen und auch dem Panel hinzufügen:

```
JButton[] buttons = new JButton[31];
for (int i = 0; i < buttons.length; i++) {
    buttons[i] = new JButton("" + i+1);            
}
for (int i = 0; i < buttons.length; i++) {
    panel.add(buttons[i]);            
}
```
Eine Möglichkeit um deine Überschrift alleine in einer Zeile zu haben, wäre leer JLabel in die verbleibenden 5 "Zellen" zu adden.
mfg
Eldorado


----------



## yax (23. Jun 2010)

Super gute Idee Eldorado,

aber wenn ich das mit dem Array anwende, habe ich immer auf jeden Button zum Beispiel  anstatt 3  31 stehen. Wie kann ich das ändern?


----------



## Eldorado (23. Jun 2010)

Klammer vergessen 

```
buttons[i] = new JButton("" + (i+1));
```


----------



## yax (23. Jun 2010)

Oh super, dankeschön, hast mir wirklich geholfen, denn ich fand mein code sah schon etwas komisch aus, aber ich hab halt keine andere Lösung gefunden 


Aber gibt es nicht noch eine elegantere Lösung für die überschrift, denn nach deiner Lösung (Eldorado), ist alles so eingequetscht und klein ?


----------



## yax (23. Jun 2010)

Und direkt noch eine Frage, wie kann ich meinen Kalender sagen dass er, wenn ich ihn öffne, den heutigen Tag makieren soll?


----------



## Michael... (24. Jun 2010)

yax hat gesagt.:


> Und direkt noch eine Frage, wie kann ich meinen Kalender sagen dass er, wenn ich ihn öffne, den heutigen Tag makieren soll?



Vergiss das mit den Buttons, leg Dir ein gutes Buch zu bzw. lies im Internet entsprechend nach und verwende eine JTable ;-)

Wenn Du bei den Buttons bleiben willst: Woran erkennst Du, welcher Button den heutigen Tag repräsentiert? Ähnlich wie Du vorgehen würdest, muss auch Dein Programm vorgehen um den entsprechenden Button zu finden. Markieren kann man dann z.B. mit setBackground(Color.RED) oder ähnlichem.


----------



## yax (24. Jun 2010)

neee ich möchte gerne meine Buttons behalten, aber wie kann ich das denn machen, dass meine kalender immer den aktuellen Tag (automatisch) weiß??


----------



## Michael... (24. Jun 2010)

yax hat gesagt.:


> neee ich möchte gerne meine Buttons behalten, aber wie kann ich das denn machen, dass meine kalender immer den aktuellen Tag (automatisch) weiß??


Du musst ihm das akutelle Datum sagen bzw. auswerten lassen. Das aktuelle Datum bekommt man über ein ein Calendar oder Date-Objekt z.B.:

```
Calendar cal = Calendar.getInstance();
System.out.println("Heute ist der " + cal.get(Calendar.DAY_OF_MONTH) + "." + (cal.get(Calendar.MONTH)+1)+ ".");
SimpleDateFormat sdf = new SimpleDateFormat("EEE, dd.MM.yy");
System.out.println("Heute ist: " + sdf.format(cal.getTime()));
```


----------



## yax (24. Jun 2010)

Aber wie binde ich das dann in meine Klasse ein??



```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.lang.*;
import java.util.*;
import java.text.*;

/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 22.06.2010
  * @author
  */

public class Kalender extends JFrame {


  // Anfang Attribute
  private CardLayout cards = new CardLayout();
  private JPanel main = new JPanel(new BorderLayout());
  private JPanel monate = new JPanel(cards);
  private JButton weiter = new JButton(">>");
  private JButton zurück = new JButton("<<");
  private juni la;
  private juli jl;
  private august ag;
  private september st;
  private oktober a;
  private november n;
  private dezember d;
  private januar11 ja11;
  private februar11 fe11;
  // Ende Attribute

  public Kalender(String title) {
    // Frame-Initialisierung
    super(title);
    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    setLocationRelativeTo(null);
    setSize(600,400);
    
    Calendar cal = Calendar.getInstance();
    System.out.println("Heute ist der " + cal.get(Calendar.DAY_OF_MONTH) + "." + (cal.get(Calendar.MONTH)+1)+ ".");
    SimpleDateFormat sdf = new SimpleDateFormat("EEE, dd.MM.yy");
    System.out.println("Heute ist: " + sdf.format(cal.getTime()));

    main.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
    
    weiter.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            cards.next(monate);
         }
      });
      
    zurück.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            cards.previous(monate);
         }
      });

    monate.setBorder(BorderFactory.createEtchedBorder());

    la = new juni();
    jl = new juli();
    ag = new august();
    st = new september();
    a = new oktober();
    n = new november();
    d = new dezember();
    ja11 = new januar11();
    fe11 = new februar11();

    monate.add(la, BorderLayout.NORTH);
    monate.add(jl, BorderLayout.NORTH);
    monate.add(ag, BorderLayout.NORTH);
    monate.add(st, BorderLayout.NORTH);
    monate.add(a, BorderLayout.NORTH);
    monate.add(n, BorderLayout.NORTH);
    monate.add(d, BorderLayout.NORTH);
    monate.add(ja11, BorderLayout.NORTH);
    monate.add(fe11, BorderLayout.NORTH);
    main.add(weiter, BorderLayout.EAST);
    main.add(zurück, BorderLayout.WEST);
    main.add(monate, BorderLayout.CENTER);
    add(main, BorderLayout.CENTER);
    // Anfang Komponenten

    // Ende Komponenten

    setResizable(false);
    setVisible(true);
  }

  // Anfang Methoden
  // Ende Methoden

  public static void main(String[] args) {
     try {
         UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
      }
      catch(Exception e) {}


    new Kalender("Kalender");
  }
}
```


----------



## yax (26. Jun 2010)

Hallo????


----------



## Bierhumpen (26. Jun 2010)

Sicher, dass das so ne gute Idee ist für jeden Monat eine eigene Klasse zu erstellen? :?


----------



## yax (26. Jun 2010)

Wie sollte ich es denn sonst übersichtlich machen??


----------

