Zum Inhalt springen

Problem mit JFrame Steuerung bzw. mit JPanel Steuerung


Empfohlene Beiträge

Geschrieben

Hi,

ich versuche bzw. ich muss ein kleines Javaproggie schreiben, leider hört es bei dem Umgang mit GUI bei meinen leider eher wenigen Kenntnissen auf.

Folgendes Problem.

Ich erstelle mir einen JFrame in dem ich per Klick auf Buttons immer das aussehen wechseln möchte, bzw. immer ein anderes Panel anzeigen.

Leider fällt mir keine andere Möglichkeit ein, vielleicht bin ich da auch völlig auf dem Holzweg.

Ich finde einfach keine Möglichkeit, wie ich das Aussehen zum jewaligen Punkt anpassen kann. Es wäre schön, wenn Ihr mir da vielleicht einen Tipp bzw. einen Ansatz geben könntet.

Hier mal mein Programm Code. Mehr habe ich leider noch nicht.


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

public class FVS
extends JFrame
implements ActionListener

{
public FVS()
{
super("FVS Arneburg");
addWindowListener(new WindowClosingAdapter(true));

initContent();
}

private void initContent()
{
/* Panel 1 */
Container guiMenu = getContentPane();
guiMenu.setLayout(new GridLayout());
/* Menu Panel */
JPanel menu = new JPanel();
//Ueberschrift
headerMenu = new JLabel("FFW Arneburg");
menu.add(headerMenu);
//Button Einsaetze
button_einsaetze = new javax.swing.JButton("Einsaetze");
button_einsaetze.addActionListener(this);
menu.add(button_einsaetze);
//Button Mitglieder
button_mitglieder = new javax.swing.JButton("Mitglieder");
button_mitglieder.addActionListener(this);
menu.add(button_mitglieder);
//Button Exit
button_exit = new javax.swing.JButton("Exit");
button_exit.addActionListener(this);
menu.add(button_exit);
//Bild
wappen = new JLabel("",new ImageIcon("arneburg.gif"),JLabel.CENTER);
menu.add(wappen);
guiMenu.add(menu);

/* Panel 2 */
Container guiMitglieder = getContentPane();
guiMitglieder.setLayout(new GridLayout());
/* Mitglieder Panel */
JPanel mitglieder = new JPanel();
//Ueberschrift
headerMitglieder = new JLabel("FFW Arneburg Mitglieder");
mitglieder.add(headerMitglieder);
guiMitglieder.add(mitglieder);
}


public void actionPerformed(ActionEvent event)
{
Object src = event.getSource();
if (src == button_exit)
{
System.exit(0);
}

}

public static void main(String[] args)
{
FVS index = new FVS();
index.setLocation(200, 200);
index.setSize(480, 320);
index.setVisible(true);
}

//Variablendeklaration
private javax.swing.JButton button_einsaetze;
private javax.swing.JButton button_mitglieder;
private javax.swing.JButton button_exit;
private JLabel headerMenu;
private JLabel wappen;
private JLabel headerMitglieder;
}
[/PHP]

Beim Klick auf den Button Mitglieder soll zB das Panel mitglieder zu sehen sein und der Rest ausgeblendet werden.

***greetz Empu

Geschrieben

Was spricht dagegen?


public void actionPerformed(ActionEvent event)
{
Object src = event.getSource();
if (src == button_exit)
{
System.exit(0);
}
else if (src == button_mitglieder)
{
mitglieder.setVisible(true);
allesAndere.setVisible(false);
}
}
[/PHP]

Oder hab' ich was falsch verstanden?

Geschrieben


if (src == button_exit) {
System.exit(0);
}
else if (src == button_mitglieder)
{
[/php]

Wenn ich sowas sehe, bekomme ich nen ganz dicken Hals und mir rollen sich die Fussnägel hoch... :eek

Seit wann werden denn Objekte mit "[b]==[/b]" abgefragt?? Nimmt man dafür nicht ".equals(Object o)"??

Also... abändern.... :rolleyes:

Geschrieben

Wenn ich sowas sehe, bekomme ich nen ganz dicken Hals und mir rollen sich die Fussnägel hoch... :eek

Seit wann werden denn Objekte mit "[b]==[/b]" abgefragt?? Nimmt man dafür nicht ".equals(Object o)"??

Er holt sich das Source Object des Events und vergleicht das mit dem Button der die ActionEvents empfängt, was spricht dagegen? Es ist nun mal ein und dasselbe Object und somit kann er auch == verwenden.

Also erst lesen und dann brüllen. ;)

Zum Problem, du setzt 2 mal etwas aufs contentpane, damit erstezt du das eine Panel. Du musst die Panels auf contentpane erst setzen wenn jeweils das event kommt. Alle anderen Panels hälst erst einmal so in einer Variable.

Gruß Jaraz

Geschrieben
Wenn ich sowas sehe, bekomme ich nen ganz dicken Hals und mir rollen sich die Fussnägel hoch... [...] Seit wann werden denn Objekte mit "==" abgefragt?? [...] Also... abändern.
Warum? Es ist komplett falsch zu sagen, ich darf Objekte nie mit == vergleichen. Richtig ist, dass es häufig so ist, dass equals die richtige Art zu Vergleichen ist (und Newbies gerne den == Vergleich nehmen und sich wundern, wieso nicht das gewünschte Ergebnis rauskommt), aber auch ein direkter Referenz-Vergleich kann hier und da angebracht sein.

Es macht durchaus Sinn zu fragen

"Ist x1 dasselbe Objekt wie x2?"

(Vergleich durch ==)

anstatt

"Ist x1 inhaltlich gleich mit x2"

(Vergleich über equals)

In dem Beispiel hier ist das sicherlich eine mögliche herangehensweise, auch wenn ich es für sinnvoller halte jede Art von Aktion, die über einen JButton getriggert wird in eine eigene Action Klasse laufen zu lassen.

Nichtsdestotrotz ist die pauschale Aussage == == böse Quatsch.

Geschrieben

Hallo,

vielen Dank...Es funzt jetzt so, wie ich es mir vorgestellt habe. Außer dass ich noch nen bissel mit dem LayoutManager basteln muss.

@ Jarez

Vielen Dank für die Idee, dank intensiver Googlesuche konnte ich es umsetzen, hoffe ich *gg*

Dank eines Tutoren von mir bin ich dann auch auf die "Endlösung" gekommen. Ich möchte diese hier einfach mal posten, vlt hilft es ja einem anderen suchenden.


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

public class FVS
extends JFrame
implements ActionListener

{
public FVS()
{
super("FVS - FFW Arneburg");
addWindowListener(new WindowClosingAdapter(true));

initContent(1);
}

private void initContent(int panel)
{
setLayout(new GridLayout());
/* Menu */
JPanel menu = new JPanel();
menu.setLayout(new FlowLayout());
//Ueberschrift
headerMenu = new JLabel("FFW Arneburg");
headerMenu.setFont(new Font("Utopia",3,16));
//Button Einsaetze
button_einsaetze = new javax.swing.JButton("Einsaetze");
button_einsaetze.addActionListener(this);
menu.add(button_einsaetze);
//Button Mitglieder
button_mitglieder = new javax.swing.JButton("Mitglieder");
button_mitglieder.addActionListener(this);
menu.add(button_mitglieder);
//Button Exit
button_exit = new javax.swing.JButton("Exit");
button_exit.addActionListener(this);
menu.add(button_exit);

/* Panel 1 */
/* Startbild Panel */
JPanel start = new JPanel();
start.setLayout(new FlowLayout());
wappen = new JLabel("",new ImageIcon("arneburg.gif"),JLabel.CENTER);
start.add(wappen);

/* Panel 2 */
/* Einsaetze Panel */
JPanel einsaetze = new JPanel();
einsaetze.setLayout(new FlowLayout());
//Ueberschrift
headerEinsaetze = new JLabel("FFW Arneburg Einsaetze");
headerEinsaetze.setFont(new Font("Utopia",3,16));
einsaetze.add(headerEinsaetze);

/* Panel 3 */
/* Mitglieder Panel */
JPanel mitglieder = new JPanel();
mitglieder.setLayout(new FlowLayout());
//Ueberschrift
headerMitglieder = new JLabel("FFW Arneburg Mitglieder");
headerMitglieder.setFont(new Font("Utopia",3,16));
mitglieder.add(headerMitglieder);

/* Panel 4 */
/* Neue Mitglieder Panel */
JPanel neueMitglieder = new JPanel();
neueMitglieder.setLayout(new GridLayout(13, 2));
//headerNeueMitglieder = new JLabel("Neues Mitglied");
//neueMitglieder.add(headerNeueMitglieder);
//headerNeueMitglieder.setFont(new Font("Utopia",3,16));
lvorname = new JLabel("Vorname");
neueMitglieder.add(lvorname);
tvorname = new JTextField(10);
neueMitglieder.add(tvorname);
lname = new JLabel("Name");
neueMitglieder.add(lname);
tname = new JTextField(10);
neueMitglieder.add(tname);
lstrasse = new JLabel("Strasse Nr.");
neueMitglieder.add(lstrasse);
tstrasse = new JTextField(10);
neueMitglieder.add(tstrasse);
lplz = new JLabel("PLZ");
neueMitglieder.add(lplz);
tplz = new JTextField(10);
neueMitglieder.add(tplz);
lort = new JLabel("Ort");
neueMitglieder.add(lort);
tort = new JTextField(10);
neueMitglieder.add(tort);
lposition = new JLabel("Position"); //Dienstgrad
neueMitglieder.add(lposition);
tposition = new JTextField(10);
neueMitglieder.add(tposition);
lurlaub = new JLabel("Urlaubstage");
neueMitglieder.add(lurlaub);
turlaub = new JTextField(10);
neueMitglieder.add(turlaub);

/* Abfrage Panelausgabe */
if(panel == 1)
{
getContentPane().removeAll();
add(menu);
add(start);
}
if(panel == 2)
{
getContentPane().removeAll();
add(menu);
add(einsaetze);

}
if(panel == 3)
{
getContentPane().removeAll();
add(menu);
add(mitglieder);
add(neueMitglieder);
}
setVisible(true);
}

public void actionPerformed(ActionEvent event)
{
Object src = event.getSource();
if (src == button_einsaetze)
{
System.out.println("Klick Einsaetze");
initContent(2);
}
if (src == button_mitglieder)
{
System.out.println("Klick Mitglieder");
initContent(3);
}
if (src == button_exit)
{
System.out.println("Klick Exit");
System.exit(0);
}
}

public static void main(String[] args)
{
FVS index = new FVS();
index.setLocation(200, 200);
index.setSize(640, 480);
index.setVisible(true);
}

//Variablendeklaration
private javax.swing.JButton button_einsaetze, button_mitglieder, button_exit;
private JLabel headerMenu, headerEinsaetze, headerMitglieder, headerNeueMitglieder, wappen;
private JLabel lname, lvorname, lstrasse, lplz, lort, lposition, lurlaub;
private JTextField tname, tvorname, tstrasse, tplz, tort, tposition, turlaub;

}
[/PHP]

Mit Hilfe des ActionListener und der kleinen Abfrage kann ich die JPanels nun steuern.

[b] getContentPane().removeAll();[/b] hat mir am meisten kopfzerbrechen bereitet, da der Inhalt beim mehrmaligen Aufruf immer noch erhalten bleibt, damit wird der Container erstmal gelöscht und dann werden die Inhalte neu eingefügt.

***greetz Empu

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...