Empujador Geschrieben 21. Juni 2005 Geschrieben 21. Juni 2005 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 Zitieren
geloescht_Newlukai Geschrieben 22. Juni 2005 Geschrieben 22. Juni 2005 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? Zitieren
Peeter Geschrieben 22. Juni 2005 Geschrieben 22. Juni 2005 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.... Zitieren
Jaraz Geschrieben 22. Juni 2005 Geschrieben 22. Juni 2005 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 Zitieren
perdian Geschrieben 22. Juni 2005 Geschrieben 22. Juni 2005 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. Zitieren
Empujador Geschrieben 22. Juni 2005 Autor Geschrieben 22. Juni 2005 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 Zitieren
Empfohlene Beiträge
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.