Panel umblenden

Antagor

Grünschnabel
Hallo Leute,
ich bin noch neu in der Java und objektorientierten Welt. Ich hab mich auch schon hier durch das Forum gelesen, brauche aber noch einige Hinweise...

Ich habe ein Applet in meine Webseite eingebunden. In dem Applet möchte ich dann programmgesteuert mehrere Panels die ich im JBuilder aufgebaut habe umblenden. Ich habe auch schon versucht mit visible, enable und repaint zu arbeiten. Dann hab ich hier ein ähnliches Problem gelesen und habe es daraufhin mit validate und update versucht.

Kann mir eventuell jemand sagen wie ich die Panels (incl. aller Objekte - Buttons und Textfelder - darin) umblenden kann?
Ich denke mal mein Fehler wird darin liegen, das ich die Methoden auf die falschen Objekte in der falschen Reihenfolge angewendet habe.
Wenn es möglich ist möchte ich ohne Frames arbeiten.

Vielen Dank schon mal für eure Hilfe
Antagor
 
Kannst du mal den betreffenden Code-Teil zeigen. Ist mir nicht ganz klar was du mit umblenden meinst.

Nove
 
Codebeispiel

Hallo
ich hab mal meinen Problemfall nachgebaut, nur 2 Panels die dann umgeblendet werden sollen. Der interne Betrachter vom JBuilder spielt es richtig ab, im Browser wird der Screen nach Klicken auf OK einfach nur grau. Die Panels sind beide mit dem JBuilder aufgebaut, jeweils in JBinit1 und 2. Beim Umblenden hab ich verschiedene Versuche mit remove, invisible und enabe gemacht. Wie kann ich 2 Panels umblenden?
Wenn wir schon mal dabei sind - kann mir jemand sagen, warum der JBuilder eine Routine mit dem Appletnamen und eine Init mit identischem Code anlegt?
Es sind wahrscheinlich beides einfache blöde Fragen, die mich am Anfang meiner Arbeit mit Java aber leider sehr aufhalten.
Vielen Dank für die Hilfe


package panel;

import java.awt.*;
import java.awt.event.*;
import java.applet.*;

public class panelapplet extends Applet {
private boolean isStandalone = false;
Panel panel1 = new Panel();
Button button1 = new Button();
Label label1 = new Label();
BorderLayout borderLayout1 = new BorderLayout();
BorderLayout borderLayout2 = new BorderLayout();
Panel panel2 = new Panel();
Label label2 = new Label();
Button button2 = new Button();

//Parameterwert holen
public String getParameter(String key, String def) {
return isStandalone ? System.getProperty(key, def) :
(getParameter(key) != null ? getParameter(key) : def);
}

// Das Applet konstruieren
// public panelapplet() {
// try {
// jbInit1();
// }
// catch(Exception e) {
// e.printStackTrace();
// }
// }

//Das Applet initialisieren
public void init() {
try {
jbInit1();
}
catch(Exception e) {
e.printStackTrace();
}
}

//Initialisierung der Komponenten
private void jbInit1() throws Exception {
button1.setLabel("OK");
button1.addActionListener(new panelapplet_button1_actionAdapter(this));
label1.setText("Hallo");
this.setLayout(borderLayout1);
this.add(panel1, BorderLayout.CENTER);
panel1.add(label1, null);
panel1.add(button1, null);
}

//Das Applet starten
public void start() {
}

//Das Applet anhalten
public void stop() {
}

//Das Applet löschen
public void destroy() {
}

//Applet-Information holen
public String getAppletInfo() {
return "Applet-Information";
}

//Parameter-Infos holen
public String[][] getParameterInfo() {
return null;
}
private void jbInit2() throws Exception {
this.setLayout(borderLayout2);
label2.setText("2. Seite");
label2.setBounds(new Rectangle(131, 185, 36, 15));
button2.setLabel("OK");
button2.setBounds(new Rectangle(235, 183, 47, 23));
panel2.setLayout(null);
this.add(panel2, BorderLayout.CENTER);
panel2.add(label2, null);
panel2.add(button2, null);
}

void button1_actionPerformed(ActionEvent e) {
panel1.setVisible(false);
panel1.setEnabled(false);
repaint();
this.removeAll();
repaint();
try {
jbInit2();
}
catch(Exception e2) {
e2.printStackTrace();
}
}
}

class panelapplet_button1_actionAdapter implements java.awt.event.ActionListener {
panelapplet adaptee;

panelapplet_button1_actionAdapter(panelapplet adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.button1_actionPerformed(e);
}
}
 
Re: Codebeispiel

Original geschrieben von Antagor
Hallo
ich hab mal meinen Problemfall nachgebaut, nur 2 Panels die dann umgeblendet werden sollen. Der interne Betrachter vom JBuilder spielt es richtig ab, im Browser wird der Screen nach Klicken auf OK einfach nur grau. Die Panels sind beide mit dem JBuilder aufgebaut, jeweils in JBinit1 und 2. Beim Umblenden hab ich verschiedene Versuche mit remove, invisible und enabe gemacht. Wie kann ich 2 Panels umblenden?

Code:
  //Initialisierung der Komponenten
  private void jbInit1() throws Exception {
    button1.setLabel("OK");
    button1.addActionListener(new panelapplet_button1_actionAdapter(this));
    label1.setText("Hallo");
    this.setLayout(borderLayout1);
    this.add(panel1,  BorderLayout.CENTER);
    panel1.add(label1, null);
    panel1.add(button1, null);
  }

  private void jbInit2() throws Exception {
    this.setLayout(borderLayout2);
    label2.setText("2. Seite");
    label2.setBounds(new Rectangle(131, 185, 36, 15));
    button2.setLabel("OK");
    button2.setBounds(new Rectangle(235, 183, 47, 23));
    panel2.setLayout(null);
    this.add(panel2, BorderLayout.CENTER);
    panel2.add(label2, null);
    panel2.add(button2, null);
  }

  void button1_actionPerformed(ActionEvent e) {
    panel1.setVisible(false);
    panel1.setEnabled(false);
    repaint();
    this.removeAll();
    repaint();
    try {
      jbInit2();
    }
    catch(Exception e2) {
      e2.printStackTrace();
    }
  }

Ich würde vermuten, dass die hinzugefügten Panel (s.o., fett) auch entfernt werden müssen, wenn Du ein anderes/neues Panel auf CENTER hinzufügen möchtest.
Noch ein Tipp: Ich würde nicht jedes Mal beim hin- und herschalten die jbInit aufrufen, sondern einfach remove(altesPanel) und add(neuesPanel)
Das erspart Dir u.a., dass immer und immer wieder neue actionListener hinzugefügt werden.
 
Panel entfernen

ich habe doch beim umblenden einen Befehl
this.removeAll();
drin, damit müßte das Panel doch weg sein. Oder muß ich es einzeln angeben was er löschen soll?

Kann man nicht mehrere Sachen gleichzeitig aufbauen und die übrigen einfach nur unsichtbar schalten? Wie macht man das denn sonst? Ich bin doch nicht der einzige der zwischendurch mal den Bildschirm löschen möchte um was neues anzuzeigen.

Danke
 
Re: Panel entfernen

Original geschrieben von Antagor
ich habe doch beim umblenden einen Befehl
this.removeAll();
drin, damit müßte das Panel doch weg sein. Oder muß ich es einzeln angeben was er löschen soll?

Hm, sollte eigentlich reichen.

Kann man nicht mehrere Sachen gleichzeitig aufbauen und die übrigen einfach nur unsichtbar schalten? Wie macht man das denn sonst? Ich bin doch nicht der einzige der zwischendurch mal den Bildschirm löschen möchte um was neues anzuzeigen.
Danke

Normalerweise Komponente / Panel entfernen und neue dahin. Ob das bei Applets anders ist, k.a.
Evtl. spielt es eine Rolle, ob man mit einer ContentPane arbeitet?
 
Zurück