JPanel variablenabhängig erstellen

Speedman15

Mitglied
Hallo zusammen,

ich bin gerade am programmieren für ein Schulprojekt, aber komme einfach nicht weiter:

Meine Frage ist, wie ich es schaffe ein JPanel mit einem String als Namen zu erstellen, und dann bei diesem zB die Farbe (auch mit Variablen ) zu ändern.

zB bei dem den Namen feld3 mit meinem String x_y auszutauschen :

JPanel feld3 =new JPanel();
feld3.setBounds(100,200,100,100);
feld3.setLayout(new GridLayout(1,1));
feld3.setBackground(new Color(00,60,50));
fenster.add(feld3);


Diese Methode scheint nicht zu funktionieren:

void GUI_setzen(String x_y, int x, int y, int R, int G, int B){
JPanel x_y =new JPanel();
x_y.setBounds(x,y,100,100);
x_y.setLayout(new GridLayout(1,1));
x_y.setBackground(new Color(R,G,B));
fenster.add(x_y);
}


Vielen Dank für eure Hilfe!

Speedman15
 

Speedman15

Mitglied
Hi, danke für deine schnelle Antwort. Ich habe vor, auf ein schon vorhandenes Spielfeld (Schachbrettförmig) mit einer Methode mir beliebig viele verschiedenfarbige Felder zu erstellen, mit den Koordinaten und der Farbe als Variablen, dass ich nicht ewig viele einzelnen Methoden schreiben muss. Ich hoffe, jetzt hab ich es verständlicher hingebracht :rolleyes:
 

stg

Top Contributor
Wie sind dein Spielfeld aus? (Code)
Wieso willst du einen Variablen-Namen übergeben?
Zeig uns doch mal die Stelle im Code, an der du deine neue Methoden verwenden willst. Vielleicht kommt dann ein bisschen Licht ins Dunkel.

Das Problem bei deiner geposteten Methode ist, dass du einen Variablennamen für das Panel nicht einfach an die Methode übergeben kannst. Und da gibt es auch gar keinen Grund zu. Lass den String-Parameter für den Variablen-Namen einfach weg, und deine Methode macht vielleicht schon genau das, was du möchtest. Übergibst du den Variablen-Namen, weil du später auf genau dieses Panel zugreifen möchtest? Falls ja, dann solltest du eventuell deine Methoden-Signatur dahingehend ändern, dass ein Panel zurückgegeben wird und deine Methode so abändern, dass das gerade erstellte Panel zurückgegeben wird. An der Stelle, an der du die Methode aufrufst, könntest du das zurückgegebene Panel eventuell in ein 2-dim Array einordnen. Wenn du mehrere Felder erstellen willst, dann kannst du das ggfls in einer Schleife abarbeiten ... aber das ist (ohne weiteren Code zu kennen) alles nur ins Blaue geraten.

Ich vermute stark, dass du dich an die GUI Programmierung wagst, ohne gefestigte OOP Grundlagen. Da rate ich fast jedem von ab, da meist nix gescheites am Ende dabei rumkommt, und es nur für Frustration sorgt.
 

Speedman15

Mitglied
Hi, ich habe 2 Klassen, einmal die Klasse GUI, die ich nicht komplett selbst erstellt habe (Schulprojekt) und eine Klasse namens Spiel. Die Klasse Spiel hat eine Methode, die mir die Chips in meinem Array in der Klasse Spiel setzt. Um dies auch grafisch anzuzeigen, brauche ich die Möglichkeit, eine Methode in der Klasse GUI zu haben, die mir auf Befehl den Chip (soll grafisch ein Quadrat sein) an den Koordinaten x und y und mit einer bestimmten Farbe, plazieren kann. Dies soll natürlich öfter geschehen, weshalb ich mit Variablen anfangen will. Die zweite Methode hat mir zuvor ein Spielfeld erstellt, dass aus vielen einzelnen Quadraten besteht. Diese sind aber schon da, und für mich schwer möglich in ihrer Farbe zu ändern, da diese durchnummeriert die Namen feld1, feld2, feld3,... haben. Später muss ich die Quadrate nicht mehr bearbeiten, weshalb der Name ziemlich egal ist.

Der Code sieht in der Klasse GUI ca. so aus:
Java:
import java.awt.*;
import javax.swing.*;
public class Grafik
{
 
    public void main()
    {
       JFrame fenster = new JFrame("4 Gewinnt!");
       fenster.setSize(700,800);
       fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       fenster.getContentPane();
       fenster.setLayout(null);
     
       JPanel feld1 =new JPanel();
       feld1.setBounds(0,100,100,100);
       feld1.setLayout(new GridLayout(1,1));
       feld1.setBackground(new Color(00,60,00));
       fenster.add(feld1);
     
       JPanel feld2 =new JPanel();
       feld2.setBounds(100,100,100,100);
       feld2.setLayout(new GridLayout(1,1));
       feld2.setBackground(new Color(00,80,50));
       fenster.add(feld2);
     
       JPanel feld3 =new JPanel();
       feld3.setBounds(100,200,100,100);
       feld3.setLayout(new GridLayout(1,1));
       feld3.setBackground(new Color(00,60,50));
       fenster.add(feld3);
     
      //usw bis ich mit allen Feldern durch bin
     
       fenster.setVisible(true);
    }
    void GUI_setzen(String x_y, int x, int y, int R, int G, int B){
     
       JPanel String x_y =new JPanel();
       x_y.setBounds(100,200,100,100);
       x_y.setLayout(new GridLayout(1,1));
       x_y.setBackground(new Color(00,60,50));
       fenster.add(x_y);
     
     
     
     
    }
}
 

mrBrown

Super-Moderator
Mitarbeiter
Wenn ich dich richtig verstehe, willst du die JPanel über einen Index oä ansprechen?
Wenn du die alle in einem Array speicherst, kannst du über Index oder mit Interieren ansprechen
 

Speedman15

Mitglied
Wenn ich dich richtig verstehe, willst du die JPanel über einen Index oä ansprechen?
Hi, ja, ich sollte sie am besten ansprechen können und auch erstellen können. Weil ich will mit einer Methode mir xbeliebige JPanel erstellen können. Sry, ich anscheinend doch noch ein totaler Anfänger, ich kann mir nicht vorstellen, wie ich das im Code dann ohne Fehlermeldungen realisieren kann :(
 

JStein52

Top Contributor
Um dir mal ein Gefühl dafür zu geben: etwa so

Code:
import java.awt.*;
import javax.swing.*;
public class Grafik
{
    JPanel[] meinePanels = new JPanel[3];
    public void main()
    {
       JFrame fenster = new JFrame("4 Gewinnt!");
       fenster.setSize(700,800);
       fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       fenster.getContentPane();
       fenster.setLayout(null);
    
       meinePanels[0] =new JPanel();
       meinePanels[0].setBounds(0,100,100,100);
       meinePanels[0].setLayout(new GridLayout(1,1));
       meinePanels[0].setBackground(new Color(00,60,00));
       fenster.add(meinePanels[0]);
    
       meinePanels[1] =new JPanel();
       meinePanels[1].setBounds(100,100,100,100);
       meinePanels[1].setLayout(new GridLayout(1,1));
       meinePanels[1].setBackground(new Color(00,80,50));
       fenster.add(meinePanels[1]);
    
       meinePanels[2] =new JPanel();
       meinePanels[2].setBounds(100,200,100,100);
       meinePanels[2].setLayout(new GridLayout(1,1));
       meinePanels[2].setBackground(new Color(00,60,50));
       fenster.add(meinePanels[2]);
    
      //usw bis ich mit allen Feldern durch bin
    
       fenster.setVisible(true);
    }
    void GUI_setzen(int panelIndex, int x, int y, int R, int G, int B){
    
       meinePanels[panelIndex].setBounds(100,200,100,100);
       meinePanels[panelIndex].setLayout(new GridLayout(1,1));
       meinePanels[panelIndex].setBackground(new Color(00,60,50));
    }
}

Und die GUI_setzen rufst du mit dem gewünschten Index auf !
Und dann wirst du am Ende vermutlich noch ein repaint() oder so was machen müssen damit die Änderung sichtbar wird.
 

Speedman15

Mitglied
Hi, danke für den Code und deine Hilfe.

JPanel[] meinePanels = new JPanel[3];
Wozu muss dort eigentlich noch eine [3] stehen? Kann ich die mit einer Variabelanzahl ersetzten, dass ich mir ein beliebiges JPanel erstellen kann?

Der Code funktioniert so leider nicht:
Java:
import java.awt.*;
import javax.swing.*;
public class Grafik
{
    JPanel[] meinePanels = new JPanel[3];
    void GUI_setzen(int panelIndex, int x, int y, int R, int G, int B){
   
       JFrame fenster = new JFrame("4 Gewinnt!");
       fenster.setSize(700,800);
       fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       fenster.getContentPane();
       fenster.setLayout(null);
   
       //meinePanels[panelIndex] =new JPanel();  ArrayIndexOutOfBoundsException
       JPanel[] meinePanels = new JPanel[panelIndex];
       meinePanels[panelIndex].setBounds(x,y,100,100);
       meinePanels[panelIndex].setLayout(new GridLayout(1,1));
       meinePanels[panelIndex].setBackground(new Color(00,60,50));
       fenster.setVisible(true);
    }
}

LG Speedman15
 
Zuletzt bearbeitet:

JStein52

Top Contributor
Nein so wie du es hast funktioniert es nicht. Das Array für die JPanels musst du dir vorher anlegen, und die 3 war nur ein Beispiel weil du in deinem Code 3 Panels hattest. Hier kommt die Zahl hin die deiner maximalen Anzahl von Panels entspricht.

Code:
    JPanel[] meinePanels = new JPanel[xxxxxxx];
    void GUI_setzen(int panelIndex, int x, int y, int R, int G, int B){
 
       JFrame fenster = new JFrame("4 Gewinnt!");
       fenster.setSize(700,800);
       fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       fenster.getContentPane();
       fenster.setLayout(null);
 
       meinePanels[panelIndex] = new JPanel;

Und in deiner GUI_setzen solltest du am Anfang noch eine Prüfung einbauen dass panelIndex < meinePanels.length ist. Und das mit dem JFrame gehört dann wohl auch ausserhalb von GUI_setzen. sonst legst du ja auch genau so viele Frames an. Ich gehe mal davon aus dass du von irgendwo für jedes Panel GUI_setzen aufrufst ???
 

Speedman15

Mitglied
Nein so wie du es hast funktioniert es nicht. Das Array für die JPanels musst du dir vorher anlegen, und die 3 war nur ein Beispiel weil du in deinem Code 3 Panels hattest. Hier kommt die Zahl hin die deiner maximalen Anzahl von Panels entspricht.

Code:
    JPanel[] meinePanels = new JPanel[xxxxxxx];
    void GUI_setzen(int panelIndex, int x, int y, int R, int G, int B){

       JFrame fenster = new JFrame("4 Gewinnt!");
       fenster.setSize(700,800);
       fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       fenster.getContentPane();
       fenster.setLayout(null);

       meinePanels[panelIndex] = new JPanel;

Und in deiner GUI_setzen solltest du am Anfang noch eine Prüfung einbauen dass panelIndex < meinePanels.length ist. Und das mit dem JFrame gehört dann wohl auch ausserhalb von GUI_setzen. sonst legst du ja auch genau so viele Frames an. Ich gehe mal davon aus dass du von irgendwo für jedes Panel GUI_setzen aufrufst ???

Vielen herzlichen Dank, jetzt funktioniert das mit den Panels super und kann mir das ewige switch Geschreibe sparen. ;)
Jetzt muss ich es nur noch schaffen, die repaint Methode einfügen und schon läuft es so wie es soll. Super, nochmals vielen Dank! :D
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
richis-fragen Optisch JPanel BorderLayout vertikaler Rand dicker als horizontaler Rand Java Basics - Anfänger-Themen 4
N Klassen Hintergrundfarbe in JPanel ändert sich nicht Java Basics - Anfänger-Themen 3
J JSON mit einem JPanel Java Basics - Anfänger-Themen 3
J Ein mit UI-Designer erstelltes JPanel einblenden Java Basics - Anfänger-Themen 0
J Eine theoretische Frage zur Praxis - JPanel oder Canvas Java Basics - Anfänger-Themen 5
J Beim Start des Programms zB. eine Linie in JPanel ausgeben Java Basics - Anfänger-Themen 4
C mehrere JPanel in ein JFrame bringen Java Basics - Anfänger-Themen 9
M HILFE JPanel - Graphics Java Basics - Anfänger-Themen 1
B Scrollbares Fenster (JScrollPane) mit JPanel scrollt nicht Java Basics - Anfänger-Themen 3
Zeppi JPanel responsive Grid Java Basics - Anfänger-Themen 0
J JPanel in JScrollPanel Java Basics - Anfänger-Themen 4
Elyt JPanel als HintergrundBild Java Basics - Anfänger-Themen 7
W 2 JPanel in einem JFrame Java Basics - Anfänger-Themen 4
B Wie kann man an ein JPanel eine Scrollbar anheften? Java Basics - Anfänger-Themen 8
O Swing JPanel Java Basics - Anfänger-Themen 4
CptK Klassen JPanel nach Ablauf der Spielzeit neuladen Java Basics - Anfänger-Themen 2
S JPanel wird nicht angezeigt Java Basics - Anfänger-Themen 1
D Animation JPanel Java Basics - Anfänger-Themen 1
M JLabels "verrutschen" beim übergeben von JPanel Java Basics - Anfänger-Themen 2
D Auf angeklicktes JPanel zugreifen Java Basics - Anfänger-Themen 5
D JPanel mehrere Formen zeichnen Java Basics - Anfänger-Themen 5
D JPanel passt die Größe nicht an Java Basics - Anfänger-Themen 22
Y Webinhalt JPanel Java Basics - Anfänger-Themen 6
D Erste Schritte JPanel verschiebt Fenster via setVisible Java Basics - Anfänger-Themen 5
Dechasa Interface JFrame mit mehreren Übereinander liegenden JPanel Java Basics - Anfänger-Themen 5
J Methoden Dinge auf einem JPanel paltzieren Java Basics - Anfänger-Themen 1
Z JPanel wird zweimal hinterinander gezeichnet.. Wieso? Java Basics - Anfänger-Themen 4
F JFrame resize verschiebt JPanel Java Basics - Anfänger-Themen 3
A altes JPanel entfernen und neues öffnen Java Basics - Anfänger-Themen 5
I A0-Format in jpanel anzeigen Java Basics - Anfänger-Themen 1
R NullPointerException wegen JPanel oder doch nicht ? Java Basics - Anfänger-Themen 7
J Probleme mit eigenem JPanel (IDE Eclipse) Java Basics - Anfänger-Themen 4
S JPanel wird versetzt auf JFrame gelegt Java Basics - Anfänger-Themen 2
V jab ich eclipse verrückt gemacht :D ? array Jpanel, Jlabel Grafik Fehler / Frage Java Basics - Anfänger-Themen 5
R Focus auf JPanel im Thread Java Basics - Anfänger-Themen 9
I Problem mit JPanel Java Basics - Anfänger-Themen 0
B JPanel ändert die Hintergrundfarbe nicht Java Basics - Anfänger-Themen 2
F Threads funktionieren auf JPanel nicht Java Basics - Anfänger-Themen 1
C JPanel in MessageDialog Java Basics - Anfänger-Themen 1
B JPanel/JFrame in ein Applet umwandeln (Webfähig) Java Basics - Anfänger-Themen 7
S Inhalt von JPanel erst nach Resize sichtbar Java Basics - Anfänger-Themen 2
M Listener einerm JPanel hinzufuegen Java Basics - Anfänger-Themen 3
gamebreiti Methoden JPanel nach clearAll() und add neu zeichnen Java Basics - Anfänger-Themen 1
S vom JPanel aus durch Mouselistener Internet aufrufen Java Basics - Anfänger-Themen 6
Z JPanel bleibt leer Java Basics - Anfänger-Themen 2
E Bild per Verzeichnis/JFileChooser auf JPanel laden Java Basics - Anfänger-Themen 13
Q JPanel Java Basics - Anfänger-Themen 2
K Erste Schritte jpanel in einer klasse auslagern Java Basics - Anfänger-Themen 3
I Anfängerfrage JPanel repaint() Java Basics - Anfänger-Themen 6
N String auf JPanel bewegen Java Basics - Anfänger-Themen 6
K Erste Schritte Jframe Im Jpanel Java Basics - Anfänger-Themen 4
S Layout mit JPanel in JScrollPanel funktioniert nicht Java Basics - Anfänger-Themen 3
S JPanel drucken -> PrinterException Java Basics - Anfänger-Themen 2
B JPanel -JTable Java Basics - Anfänger-Themen 2
H JPanel Hintergrund transparent setzen? Java Basics - Anfänger-Themen 10
A Input/Output Hashmap in einem JPanel via JList anzeigen Java Basics - Anfänger-Themen 8
L zoomen aus jpanel Java Basics - Anfänger-Themen 7
P Bekomme in meinen JPanel nur eine JComponente angezeigt Java Basics - Anfänger-Themen 7
A Methoden repaint() zeichnet JPanel falsch Java Basics - Anfänger-Themen 3
R JFrame über einen JPanel Java Basics - Anfänger-Themen 5
I Veränderungen am JPanel vom JDialog aus Java Basics - Anfänger-Themen 6
F JPanel zu klein Java Basics - Anfänger-Themen 5
D GUI - Objekte in JPanel nach oben schieben Java Basics - Anfänger-Themen 2
S JPanel wird nicht eingefügt Java Basics - Anfänger-Themen 3
P Netbeans Platform - JLabel und JPanel setLocation Problem Java Basics - Anfänger-Themen 2
Kenan89 JPanel mit JTable Java Basics - Anfänger-Themen 9
I JPanel in JPanel Java Basics - Anfänger-Themen 2
A Zugriff auf Komponente innerhalb einer JPanel Java Basics - Anfänger-Themen 8
J Auf einem JPanel ein JFrame platzieren Java Basics - Anfänger-Themen 10
S JPanel anzeige Java Basics - Anfänger-Themen 2
propra Wie mache ich einem JPanel mein bereits instanziertes Model bekannt Java Basics - Anfänger-Themen 9
T Zugreifen auf JPanel Java Basics - Anfänger-Themen 4
K JPanel auslagern Java Basics - Anfänger-Themen 9
J Paint Methode von JPanel aufrufen Java Basics - Anfänger-Themen 15
T Tastendruck simulieren in JPanel Java Basics - Anfänger-Themen 3
P JPanel in JTable einfügen Java Basics - Anfänger-Themen 23
E Erste Schritte Objekte werden in JPanel angedockt und maximiert Java Basics - Anfänger-Themen 7
M Componenten auf JPanel anzeigen Java Basics - Anfänger-Themen 2
F JPanel als JPG - weisse Fläche Java Basics - Anfänger-Themen 9
L Image laden und auf jPanel ausgeben Java Basics - Anfänger-Themen 7
M JLabel auf JPanel positionieren Java Basics - Anfänger-Themen 8
M Verständnisfrage zu JPanel Java Basics - Anfänger-Themen 3
M MouseListener funkioniert auf JPanel nicht Java Basics - Anfänger-Themen 8
D JPanel + ein JLabel Java Basics - Anfänger-Themen 8
B JPanel-Oberfläche speichern Java Basics - Anfänger-Themen 9
X JTable in JPanel in JTabbedPane mouseevent von jtable kommt nicht durch Java Basics - Anfänger-Themen 3
P GUI, JPanel Java Basics - Anfänger-Themen 7
H JPanel in andere Klasse übergeben Java Basics - Anfänger-Themen 7
D Grösse eines JPanel hinsichtlich LayoutManager festlegen Java Basics - Anfänger-Themen 4
B JPanel über anderem JPanel Java Basics - Anfänger-Themen 6
F zeichnen in JPanel Java Basics - Anfänger-Themen 7
F Unterschied JPanel und JFrame Java Basics - Anfänger-Themen 5
U JPanel dynamisch gestalten Java Basics - Anfänger-Themen 7
H Zeichnen in JPanel Java Basics - Anfänger-Themen 8
K Auf JPanel Zeichnen Java Basics - Anfänger-Themen 8
C jPanel im jPanel verändern Java Basics - Anfänger-Themen 15
B JPanel nachträglich verändern Java Basics - Anfänger-Themen 20
C JPanel erhält sporadisch keinen Fokus Java Basics - Anfänger-Themen 3
I repaint bei jpanel Java Basics - Anfänger-Themen 10
L JPanel vergrößern bis JScrollPane nicht mehr zu sehen Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben