FB18 - Das Forum für Informatik

fb18.de / Off-Topic / Hard- und Softwarefragen

Dynamische Gui in Java

Dynamische Gui in Java 2006-09-12 21:00
Anonymer User
Ich hab gerade angefangen mit der Gui Programmierung. Ich will jetzt einen Button machen der zwischen einen TextField[ 9][ 9] und TextField[ 16][ 16] hin und her Switched.

Bei einen meiner Versuche war ich soweit, dass ich vom 9,9 aufs 16,16 feld schalten konnte.

problem dabei bei panel.removeAll() lösch ich mir das 9,9 feld kaputt so das meine zwischengespeicherten panels alle den null wert haben.

Dummerweise kann man Panels bzw. Component nicht kopiern.

Was könnte man da machen?




Re: Dynamische Gui in Java 2006-09-12 21:10
McCancey
warum kopierst du die Panelinhalte nicht einfach in ein lokales Zwischenspeicher-Array?

Re: Dynamische Gui in Java 2006-09-12 21:27
Anonymer User
weils nicht kopierbar ist.

Re: Dynamische Gui in Java 2006-09-12 21:51
Slater
wozu solche Fragen so kompliziert stellen,
hast du denn nicht das gleiche Problem mit 1 und 2 Textfeldern?
(natürlich am Anfang mal drauf hinweisen dass es in Wirklichkeit um viel mehr geht, sonst wirkt es ja zu trivial ;) )

——

also:
die Textfelder sind irgendwo gespeichert,
beim Switch entfernt man das alte Panel und erstellt ein neues,
in dem entweder 1 oder 2 Textfelder reinkommen

wo wird da jemals irgendwas kopiert/ wo wäre das nötig?
verstehe das Problem nicht,
wenn du am Anfang einmal die Textfelder in das Panel einfügst,
dann kannst du diese Logik doch später ruhig wiederverwenden

Re: Dynamische Gui in Java 2006-09-12 22:33
Anonymer User
es läuft jetzt. hab einfach leere TextField geladen. zwar nicht ganz das was ich will aber es geht.

Re: Dynamische Gui in Java 2006-09-12 23:58
ethrandil
Gibt es nicht einen Layoutmanager, mit dem man das machen kann? Mir war so…
CardLayout vielleicht. (man müsste nur oben die Reiter abschalten)

nfg
- eth

Re: Dynamische Gui in Java 2006-09-13 00:19
Lazy
Man kann doch auch Komponenten sichtbar und unsichtbar machen. Also beim switchen einfach das eine sichtbar und das andere unsichtbar machen.

Re: Dynamische Gui in Java 2006-09-13 00:46
Anonymer User
Ich hab mal eben versucht es ganz einfach zu machen.
Fügt man nur ein Panel hinzu gehts. Fügte man beide hinzu gibts kein buttons:


Quelltext:
import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class GUI { Panel _aktuellesPanel; Panel panel1; Panel panel2; Button button1; Button button2; public GUI() { final Frame frame = new Frame(); frame.setSize(800, 600); frame.setBackground(Color.cyan); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent event) { SchließenBestaetigung(); } }); panel1 = new Panel(); panel1.setSize(800,400); button1 = new Button("Alles Klar?"); panel1.add(button1); button1.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { panel1.setVisible(false); panel2.setVisible(true); } }); panel2 = new Panel(); panel2.setSize(800,200); Button button2 = new Button("JA!!!!"); panel2.add(button2); button2.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { panel2.setVisible(false); panel1.setVisible(true); } }); _aktuellesPanel = panel1; frame.add(panel1); panel2.setBackground(Color.black); frame.add(panel2); frame.setVisible(true); } public static void main(String[] args) { new GUI(); } private void SchließenBestaetigung() { final Frame di = new Frame(); di.setSize(300, 100); di.setLayout(new FlowLayout()); Button b = new Button("Abbruch"); Button a = new Button("Ok"); di.add(new Label("Wollen Sie die Anwendung wirklich beenden?", Label.CENTER)); di.add(a); di.add(b); di.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent event) { di.setVisible(false); di.dispose(); System.out.println("terminating program..."); System.exit(0); } }); b.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { di.setVisible(false); di.dispose(); } }); a.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { di.setVisible(false); di.dispose(); System.exit(0); } }); di.setVisible(true); } }
(edit fal: Code-Tags zwecks besserer Lesbarkeit hinzugefuegt)

Re: Dynamische Gui in Java 2006-09-13 02:02
Zaphod
Da kann man noch einiges verbessern ;-)

Ich hab zwar in meiner Müdigkeit irgendwie n Fehler beim Schließen des Fensters eingebaut (schließt auch, wenn man auf "nein" klickt), aber so sieht das ganze doch schonmal wesentlich hübscher aus (auch wenn ich normalerweise nur JComponents verwende…

import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import javax.swing.JFrame; import javax.swing.JOptionPane; public class GUI extends JFrame implements ActionListener, WindowListener{ private static final long serialVersionUID = 1L; private Panel panel1; private Panel panel2; private Button button1; private Button button2; public GUI() { this.setSize(800, 600); //this.setBackground(Color.cyan); this.addWindowListener(this); panel1 = new Panel(); panel1.setSize(800, 600); button1 = new Button("Alles Klar?"); button1.addActionListener(this); panel1.add(button1); panel2 = new Panel(); panel2.setSize(800, 600); panel2.setBackground(Color.black); button2 = new Button("JA!!!!"); button2.addActionListener(this); panel2.add(button2); this.add(panel1); this.add(panel2); panel2.setVisible(false); this.setVisible(true); } public static void main(String[] args) { new GUI(); } public void actionPerformed(ActionEvent e){ if(e.getSource().equals(button1)){ panel1.setVisible(false); panel2.setVisible(true); } if(e.getSource().equals(button2)){ panel2.setVisible(false); panel1.setVisible(true); } } private void schließenBestaetigung() { int jaNein = JOptionPane.showConfirmDialog( this, "Wollen Sie die Anwendung wirklich beenden?", "Programm beenden", JOptionPane.YES_NO_OPTION); if (jaNein == JOptionPane.YES_OPTION){ this.dispose(); System.exit(0); } else { System.out.println("nicht beenden"); } } // ==================================================================================== /** WindowListener-Funktionen */ public void windowClosing(WindowEvent we) { schließenBestaetigung(); } /* * Die folgenden Funktionen müssen wegen der Implementation * des WindowListeners eingebaut werden, sie haben aber keine Wirkung. */ public void windowActivated(WindowEvent e) {} public void windowClosed(WindowEvent e) {} public void windowDeactivated(WindowEvent e) {} public void windowDeiconified(WindowEvent e) {} public void windowIconified(WindowEvent e) {} public void windowOpened(WindowEvent e) {} }

Re: Dynamische Gui in Java 2006-09-13 03:09
ethrandil
Wenn ihr die Struktur eines Containers verändert (JPanel hinzufügen, etc), ist es nicht schlecht danach 'Container.validate()' aufzurufen.

mfg -eth