JPanel nach wert in JFrame laden

joli

Grünschnabel
hallo !

weiss jemand, ob und wie ich JPanels - je nach wert der main methode
eines JFrames in den JFrame laden kann ?
so koennte man dann doch unterschiedliche JPanels erstellen und dann
- je nach wert in der main methode - das entsprechende JPanel in JFrame
laden.
oder muss ich die JPanel angaben immer direkt im JFrame machen ?
vielleicht hat ja jemand das schon gemacht und ein codebeispiel/hinweis zur hand ?

danke !
 
Moin,
mir ist nicht ganz klar, was Du mit "Wert der main-Methode" meinst. Sowas in der Art?

Code:
public class MyFrame extends JFrame
{
	public MyFrame(int panelIndex)
	{
		super();
		setLayout(new GridLayout(3, 3));
                    switch (panelIndex)
                    {
                      case 1: add(myPanel1); break;
                      case 2: add(myPanel2); break;
                      case 3: add(myPanel3); break;
                    }
	}

	public static void main(String[] args)
	{
             int i = 0;
             if ( args != null )
             {
               if ( args[0].equals("1") )
		MyFrame f = new MyFrame( 1 );
               if ( args[0].equals("2") )
		MyFrame f = new MyFrame( 2 );
               if ( args[0].equals("3") )
		MyFrame f = new MyFrame( 3 );
             }
	}
}
 
...

o.k ich denke, das ist es.
nur nochmal zum verstaendnis.
wenn ich jetzt statt
int i = 0;
int i = 1;

schreiben wuerde, erscheint myPanel1, oder ?
oder muss int i = 0; immer mit der 0 dastehen ?

->nach weclchem wert im code würde sonst der panel gewaehlt werden ?


danke...
 
Re: ...

Original geschrieben von joli
o.k ich denke, das ist es.
nur nochmal zum verstaendnis.
wenn ich jetzt statt
int i = 0;
int i = 1;

schreiben wuerde, erscheint myPanel1, oder ?
oder muss int i = 0; immer mit der 0 dastehen ?

Ähm... :)
Wenn ich mir den Code noch mal so ansehe, kann die Zeile komplett raus. ;)
Denn das i findet ja nie wieder Verwendung...
 
durch welchen wert wird denn dann in dem code bestimmt, welches panel
geladen wird ?/welcher muss veraendert werden, damit ein anderes panel geladen wird ?
 
Schau noch mal mal hier:
Code:
public static void main(String[] args)
{
             int i = 0;
             if ( args != null )
             {
               if ( args[0].equals("1") )
MyFrame f = new MyFrame( 1 );
               if ( args[0].equals("2") )
MyFrame f = new MyFrame( 2 );
               if ( args[0].equals("3") )
MyFrame f = new MyFrame( 3 );
             }
}

Das heisst, in Abhängigkeit des ersten Elements aus args wird der Konstruktor mit dem gewünschten Panel geladen.
args ist das übergebene Parameter-Stringarray.
Also Aufruf in etwa so:

java MyFrame 1 // für das erste Panel
java MyFrame 2 // für das zweite Panel

usw.
 
...wenn addPanel oben im code den panel hinzufuegt,
dann koennte man doch auch per if abfrage den int-wert abfragen und dann
bei uebereinstimmung des werts den entsprechenden JPanel
mit addPanel im JFrame erscheinen lassen, oder ?
 
Natürlich. Ich hatte das Beispiel ja nur gebracht weil ich nicht wusste, wo und wie Du das steuern möchtest.
 
so ungefaehr muesste das dann wohl aussehen, oder ?
irgendwas stimmt aber noch nicht - find den fehler leider nicht.
vielleicht wer anders ? muss evtl. etwas woanders im code
angeordnet sein ?die MyPanels sind alle vorhanden...

danke, jo.

--------

package frametest1;



import java.awt.*;
import java.awt.event.*;

public class Myframe2
extends Frame
{
public static void main(String[] args)
{
Myframe2 wnd = new Myframe2();
wnd.setVisible(true);
int a = 1;
}

public Myframe2()
{
super("Test Gridlayout");
addWindowListener(new windowclose(true));
//Layout setzen und Komponenten hinzufügen
setLayout(new GridLayout(1,2));

switch (a)
{
case 1: add(MyPanel1);
add(MyPanel2); break;
case 2: add(MyPanel3);
add(MyPanel4); break;
default:
System.out.println("Falscher Wert!");
}
pack();
}
}
 
Code:
  public static void main(String[] args)
  {
  	Myframe2 wnd = new Myframe2();
    wnd.setVisible(true);
    int a = 1;
  }

  public Myframe2()
  {
    super("Test Gridlayout");
    addWindowListener(new windowclose(true));
    //Layout setzen und Komponenten hinzufügen
    setLayout(new GridLayout(1,2));
    
    switch (a)
	{
	case 1: add(MyPanel1); 
	              add(MyPanel2); break;	
	case 2: add(MyPanel3); 	
	              add(MyPanel4); break;			
		default:
		System.out.println("Falscher Wert!");
	}
    pack();
  }
}

Siehe fett markierte Stellen, so kann das nicht funktionieren.
int a = 1; steht in der main, d.h. sie ist ausserhalb der main nicht sichtbar.
Also auch nicht im Konstruktor sichtbar.
 
Zurück