Panel in Variable setzen möglich?

HexaDeff

Mitglied
Hi,

also ich habe mir mal überlegt, ob man ein Panel bzw. dessen Namen eventuell in eine Variable stecken kann. Ich habe mir das ungefähr so vorgestellt:

Ich erstelle mir meinetwegen drei Panels namens: panel_1, panel_2, panel_3. Nun erstelle ich eine Variable (vom Typ String) namens: panelx. Und nun möchte ich immer den Wert von panelx ändern, je nach Belieben zu panel_1, panel_2 und panel_3. Das möchte ich aber dann aber auch benutzen können, meinetwegen wenn ich was auf den Panels adden möchte.

So könnte das ungefähr aussehen:

Java:
import java.awt.*;
import javax.swing.*;

public class gui {
	String panelx;
	
	JFrame frame = new JFrame();
	JPanel panel_1 = new JPanel();
	JPanel panel_2 = new JPanel();	
	JPanel panel_3 = new JPanel();

	JLabel label1 = new JLabel();
	JLabel label2 = new JLabel();
	JLabel label3 = new JLabel();

	
	public static void main(String[] args){
		new gui();
	}
	
	public gui(){
		Test();
				
	}
	
	public void Test(){
		frame.setSize(800, 600);
		frame.setResizable(false);
		frame.setTitle("Test");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.getContentPane().setLayout(null);
		
//		panel_1.setBounds(0, 62, 800, 175);
//		frame.getContentPane().add(panel_1);
		panelx = "panel_1";
		panelx.setBounds(0, 62, 800, 175);
		frame.getContentPane().add(panelx);
		
//		panel_2.setBounds(0, 302, 800, 175);
//		frame.getContentPane().add(panel_2);
		panelx = "panel_2";
		panelx.setBounds(0, 302, 800, 175);
		frame.getContentPane().add(panelx);
		
//		panel_3.setBounds(0, 520, 800, 33);
//		frame.getContentPane().add(panel_3);
		panelx = "panel_3";
		panelx.setBounds(0, 520, 800, 33);
		frame.getContentPane().add(panelx);
		
		frame.setVisible(true);
	}
}

Das was ausgeklammert ist, ist der eigentliche Code. Und das darunter ist meine Idee. Hier wird natürlich ein Fehler angezeigt, nämlich dass Strings hierfür nicht verwendet werden können. Aber kann man das so ähnlich irgendwie realisieren, auch wenn es eigentlich unnötig ist? Und wenn ja, wie?
 

HimBromBeere

Top Contributor
Panel kennt glaube ich die Methode
Code:
.setName(String name)
die dafür verwendet werden kann (alternativ
Code:
.getName()
zum Auslesen des Namens)
 

KrokoDiehl

Top Contributor
Naja, hier hast du vor String- und Panel-Objekte zu mischen. Was du machen könntest ist nur mit Panel-Objekten zu arbeiten:

Java:
JPanel panel_1 = ...;
JPanel panel_2 = ...;
JPanel panel_n = ...;

...

JPanel panel_x = panel_1;
panel_1.add(...);

panel_x = panel_2;
usw.

Aber ich vermute das ist nicht das was du willst? Falls du über den Namen gehen willst, brauchst du einen Lookup-Mechanismus (eine Zuordnung Panel-zu-Name) über die du suchen kannst.
Eine Möglichkeit wäre eine Map (z.B.
Code:
HashMap<String, JPanel>
) eine andere wäre es, alle Componenten zu durchsuchen und den Namen zu vergleichen.

Hier ein HashMap-Beispiel:
Java:
Map<String, JPanel> mapPanels = new HashMap<String, JPanel>();
mapPanels.put("panel_1", panel_1);
...

JPanel panelx = mapPanels.get("panel_2500");
panelx.add( ... );
 

HimBromBeere

Top Contributor
Naja, deine Panel sind ja vom Datentyp JPanel und nicht vom Typ String, darum funktioniert panel = "Panel1" nicht.

EDIT: Das mit setName() war natürlich Quatsch, was bitte soll ein JPanel mit einem Namen? Also nochmal zum Mitschreiben: was verstehst du unter "Namen des Panels"? Sollte es das Folgende sein:
Ich erstelle mir meinetwegen drei Panels namens: panel_1, panel_2, panel_3
?
Das sind keine Namen der JPanels sondern lediglich die Namen der Variablen, die dieses Panel referenzieren. Das hat mit dem eigentlichen JPanel aber rein gar nichts zu tun.
 
Zuletzt bearbeitet:

HexaDeff

Mitglied
Naja, hier hast du vor String- und Panel-Objekte zu mischen. Was du machen könntest ist nur mit Panel-Objekten zu arbeiten:

Java:
JPanel panel_1 = ...;
JPanel panel_2 = ...;
JPanel panel_n = ...;

...

JPanel panel_x = panel_1;
panel_1.add(...);

panel_x = panel_2;
usw.

Das funktioniert an sich schon so wie ich es wollte, danke. Allerdings läuft es nicht so wie ich es mir (bei den Variablen) gedacht habe. Nehmen wir an ich füge noch zwei Buttons hinzu, welche auf Knopfdruck jeweils Bilder ausgeben sollen. Und es soll wie folgt aussehen (Ich habe das Meiste an Code einfach mal rausgenommen jetzt rausgenommen):

Java:
	public void actionPerformed(ActionEvent e) {
		if(e.getSource() == button1){
			JPanel panelx = panel_2;
			show();
		}
		
		if(e.getSource() == button2){
			JPanel panelx = panel_3;
			show();
		}
	}

public void show(){
		
		switch (pics.remove(0)) {
        case 0:
        	panelx.add(label0);
        	label0.setIcon(new ImageIcon("Pic1"));
            break;
        case 1:
        	panelx.add(label1);
        	label1.setIcon(new ImageIcon("Pic2"));
            break;
        case 2:
        	panelx.add(label2);
        	label2.setIcon(new ImageIcon("Pic3"));
            break;

D.h. wenn ich button1 drücke, soll panelx = panel_2 sein. Wenn ich jedoch button2 drücke, soll panelx = panel_3 sein. Somit muss ich die Bilder nur einmal als Code haben und kann sie dennoch an zwei verschiedenen Stellen positionieren. Andernfalls müsste ich sie ja jeweils mit panel_2 und panel_3 adden, statt einfach nur mit panelx.
 

HexaDeff

Mitglied
Du wirst wahrscheinlich an die show-Methode eine Referenz auf dein Panel übergeben...
also
Code:
show(panelx)

Oh mein Gott, ein wenig durcheinander gewesen, das habe ich ganz vergessen. Allerdings wird mir auch hier ein Fehler angezeigt:

-Syntax error on token "panelx" VariableDeclaratorld expected after this token
-panelx cannot be resolved to a variable (wurde aber doch vorher deklariert in ActionPerformed?)
 

HimBromBeere

Top Contributor
Java:
public void actionPerformed(ActionEvent e) {
    JPanel panelx = new JPanel();
    if(e.getSource() == button1) panelx = panel_2;        
    if(e.getSource() == button2) panelx = panel_3;

    show(panelx);
}
 
public void show(JPanel panelx){...}
 
Zuletzt bearbeitet:

r.w.

Bekanntes Mitglied
Da Du die Variable panelx in actionPerformed eh
sonst nicht brauchst, warum dann nicht einfach so?

Java:
public void actionPerformed(ActionEvent e) {
   if(e.getSource() == button1) show(panel_2);
   if(e.getSource() == button2) show(panel_3);
}
 
public void show(JPanel panelx){...}

VG ROlf
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Soloeco JList/DefaultListModel: Wie kann ich ein Panel hinzufügen? Java Basics - Anfänger-Themen 1
P Herausfinden, auf welchem Panel des CardLayouts man gerade ist? Java Basics - Anfänger-Themen 12
CptK Interface 2 von einander unabhängige Frames mit Panel gleichzeitig nutzen Java Basics - Anfänger-Themen 66
O Klappt nicht: Ein Panel neu zeichnen Java Basics - Anfänger-Themen 3
L Panel verkleinert sich unerklärlicherweise Java Basics - Anfänger-Themen 7
N Mehrere Forms auf einem Panel Java Basics - Anfänger-Themen 6
M Panel erstellen, welches ein Control erhält. Ausgabe soll über einen Stream erfolgen. Java Basics - Anfänger-Themen 0
J Panel auf Hintergrund Java Basics - Anfänger-Themen 5
J Panel und Menü Java Basics - Anfänger-Themen 6
S timer funktion mit javax panel Java Basics - Anfänger-Themen 3
D Hintergrund jpg auf Panel Java Basics - Anfänger-Themen 3
D Bild zum Panel hinzufügen Java Basics - Anfänger-Themen 8
A Frage zu einer Methode - Panel arbeitet nicht ordnungsgemäß Java Basics - Anfänger-Themen 2
F Neues Panel und Button unsichtbar Java Basics - Anfänger-Themen 10
D Panel sichtbar/unsichtbar machen im ActionListener Java Basics - Anfänger-Themen 3
S Image in Panel laden Java Basics - Anfänger-Themen 12
D Panel von unten herausfahren Java Basics - Anfänger-Themen 2
S mehrere Rechtecke in ein Panel Java Basics - Anfänger-Themen 2
L panel verschmiert beim draggen! Java Basics - Anfänger-Themen 2
J Panel + Label anzeigen - Ich kriege es nicht hin Java Basics - Anfänger-Themen 3
S Swing, Gridbaglayout Panel in Panel;funzt nicht!! Java Basics - Anfänger-Themen 3
S Swing, Panel über Hintergrundbild!! Java Basics - Anfänger-Themen 6
C Panel und Label überdecken sich Java Basics - Anfänger-Themen 2
J JLabels in Panel Aktualisieren Java Basics - Anfänger-Themen 5
M Spezielles Panel fade in / out Java Basics - Anfänger-Themen 5
C Panel Hintergrundfarbe per AdjustmenListenmer ändern Java Basics - Anfänger-Themen 4
D GUI: Panel in Panel laden Java Basics - Anfänger-Themen 10
R Eingefärbtes Panel wird in Frame nicht angezeigt Java Basics - Anfänger-Themen 10
eLogic Panel hinzufügen Java Basics - Anfänger-Themen 4
Nic.o Panel während Ladevorgang einblenden Java Basics - Anfänger-Themen 12
B PacMan: Panel aktualisieren Java Basics - Anfänger-Themen 2
D Eingabe aus Dialog, Ergebnis an Panel Java Basics - Anfänger-Themen 2
Z JFileChooser/ Panel + Menüproblem Java Basics - Anfänger-Themen 3
J GridLayout auf Panel zentrieren? Java Basics - Anfänger-Themen 2
G Aus eigenem Panel dieses Löschen Java Basics - Anfänger-Themen 2
J Panel-übergreifende Kommunikation Java Basics - Anfänger-Themen 3
M Panel ersetzen funktioniert nicht Java Basics - Anfänger-Themen 2
M BorderLayout zickt! Ein Panel versteckt das andere! Java Basics - Anfänger-Themen 6
K Panel fixieren und nicht zentrieren Java Basics - Anfänger-Themen 2
F Zeichnen auf einem Panel Java Basics - Anfänger-Themen 2
N Panel entfernen Java Basics - Anfänger-Themen 2
B Zugriff auf JTextPane in einem anderen Panel Java Basics - Anfänger-Themen 2
H TabbedPane: wie schalte ich auf ein bestimmtes panel? Java Basics - Anfänger-Themen 2
G Bild in Panel oder canvas einfügen Java Basics - Anfänger-Themen 3
kulturfenster Panel in Frame integrieren Java Basics - Anfänger-Themen 5
H Paint Methode malt nicht im Panel Java Basics - Anfänger-Themen 4
J Probleme mit Visual Editor Komponenten auf Panel legen Java Basics - Anfänger-Themen 4
M Panel ausgrauen (disable) Java Basics - Anfänger-Themen 2
K Component vom einem Panel löschen ? Java Basics - Anfänger-Themen 14
C Panel wird nicht übermalt Java Basics - Anfänger-Themen 6
P Swing Textarae so groß wie Panel? Java Basics - Anfänger-Themen 2
G Rekursives aufrufen führt zu StackOverflowError Panel durchl Java Basics - Anfänger-Themen 5
T JMenuItems werden von Komponente in Panel verdeckt Java Basics - Anfänger-Themen 11
G Auf ein Panel malen Java Basics - Anfänger-Themen 16
D Event mit n-Button8s) von einem Panel Java Basics - Anfänger-Themen 9
Z Wie übergebe ich einer MyFrame-Klasse ein Panel? Java Basics - Anfänger-Themen 8
A g=panel.getGraphics() im Thread => Nullpointer Java Basics - Anfänger-Themen 9
S Bilder bleiben auf einem Panel nicht gezeichnet Java Basics - Anfänger-Themen 6
L Java Control Panel Java Basics - Anfänger-Themen 5
A Swing Schriftfarbe für komplettes Panel ändern Java Basics - Anfänger-Themen 2
G Panel Java Basics - Anfänger-Themen 4
B Kann man mit XMl ein Panel erstelln Java Basics - Anfänger-Themen 2
R Einfügen einer eigenen methode in ein Panel Java Basics - Anfänger-Themen 5
E Komponenten auf Panel positionieren Java Basics - Anfänger-Themen 3
G aus Thread auf Panel zeichnen Java Basics - Anfänger-Themen 22
G Text in Panel anordnen Java Basics - Anfänger-Themen 6
M Ein Panel in ein Panel laden Java Basics - Anfänger-Themen 3
S Graphic im Panel änder durch JSlider Java Basics - Anfänger-Themen 2
P Ball auf Panel hüpfen lassen Java Basics - Anfänger-Themen 4
T Panel entfernen Java Basics - Anfänger-Themen 4
T Panel entfernen, neues hinzufügen Java Basics - Anfänger-Themen 2
A Probleme mit Panel und GUI Java Basics - Anfänger-Themen 4
D Warum färbt er das unter Panel nicht ein? Java Basics - Anfänger-Themen 3
V Panel durchsichtig machen Java Basics - Anfänger-Themen 4
D Desktop auf nem Panel Java Basics - Anfänger-Themen 6
B Panel bei Mausklick färben Java Basics - Anfänger-Themen 3
S Keyevent in Panel Java Basics - Anfänger-Themen 5
C Add / Remove Panel Java Basics - Anfänger-Themen 2
C zweites Panel auf Knopfdruck anzeigen Java Basics - Anfänger-Themen 2
O größe von panel mit gridlayout Java Basics - Anfänger-Themen 9
G Panel in Methode erneut aufrufen Java Basics - Anfänger-Themen 5
B Panel mit Radiobuttons als eigene Klasse Java Basics - Anfänger-Themen 4
G aktueller Panel, der in BorderLayout.SOUTH angeordnet ist Java Basics - Anfänger-Themen 11
A Panel und getContentPane() ? Java Basics - Anfänger-Themen 2
S panel leeren Java Basics - Anfänger-Themen 2
S Panel / setbounds Java Basics - Anfänger-Themen 3
R Image lässt sich nicht in ein Panel einfügen Java Basics - Anfänger-Themen 3
G Paint auf Panel Java Basics - Anfänger-Themen 4
G JPG in einem Panel anzeigen lassen Java Basics - Anfänger-Themen 3
A Panel überschreiben Java Basics - Anfänger-Themen 4
X GUI: neues Panel in einer Applikation anzeigen lassen Java Basics - Anfänger-Themen 2
G Panel in Container einfügen Java Basics - Anfänger-Themen 7
N need help in panel Java Basics - Anfänger-Themen 8
B Panel mit Bild wird nicht angzeigt Java Basics - Anfänger-Themen 16
M Inhalt Panel,Frame löschen Java Basics - Anfänger-Themen 8
S Image von einem Panel erzeugen! Java Basics - Anfänger-Themen 2
A Komponenten im Panel ausrichten Java Basics - Anfänger-Themen 5
G Panel zur Laufzeit laden/entladen Java Basics - Anfänger-Themen 2
S Neues Fenster/Panel nach Knopfdruck Java Basics - Anfänger-Themen 2
C Grafik in einem Panel als Bild exportieren Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben