Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Habe ein Problem mit dem wechsel von einem Jpanel zur Laufzeit. In der normalen Swingapplikation funktioniert es einwandfrei nur im Applet leider nicht und ich habe keine Ahnung weshalb.
hier der Code:
Aufruf des wechsels in einer separaten Klasse ( LoginValidate).
Die Klasse PGround (JPanel) mit dem Container für alle wechsel habe ich einfachheitshalber als Singelton implementiert.
[JAVA=77]
public void setStartPanel(int userTyp) {
System.out.println("HALLO");
if (userTyp == 0) {
System.out.println("HALLO 0");
PGround.getInstance().setPanel(new PConsumerOverView());
} else if (userTyp == 1) {
System.out.println("HALLO 1");
PGround.getInstance().setPanel(new PDossierOverView());
}
}
[/code]
Die Klasse PGround extends JPanel besitzt den Container pGround in dem die Wechsel folzogen werden sollten.
Mal die Projekt Architektur fileicht hat es ja mit dem zutuhn.
Habe eine Klasse
JaGround ==> extends JApplet (für den Start als JApplet)
JfGround ==> extendsJFrame (für den Start als normale swing Applikation)
PGround ==> extends JPanel (Singelton) (je nach start art wird das Panel von JfGround oder JaGround realisiert. Dieses holt sich erstmal das PLogin)
PLogin ==> extends JPanel (mit Loginfelde)
LoginValidate ==> (Eruiert welches Panel als nächstes angezeigt werden soll und rufft die beschriebene Methode setPanel(JPanel panel) von PGround auf.)
Das wird so nichts bringen, aber Du kannst es gern versuchen. Besser wäre es aber, den ganzen Krempel mal aufs nötigste zusammen zu stampfen; eine Klasse ggf. mit inneren Klassen. Wenn es damit funktioniert, dann findest Du den Fehler auf dem Weg vielleicht selber. Wenn nicht, dann können wir den Fehler genauer einschätzen.
Da ich's grad sehe: Du setzt oben die Größe eines Panels mit [c]setSize()[/c]. LayoutManager hast Du explizit auf [c]null[/c] gesetzt, oder liegt das Problem vielleicht an unterschiedlichen LayoutManagers?
Selbst wenn ich in der JaGround Klasse eine Methode mache die direckt auf dem eigenen Panel einen wechsel durchfüren soll.
Das ist die Japplet Klasse die das Panel PGround darstellt.
Java:
public class JaGround extends javax.swing.JApplet {
/** Initializes the applet JAGround */
public void init() {
try {
java.awt.EventQueue.invokeAndWait(new Runnable() {
public void run() {
initComponents();
}
});
} catch (Exception ex) {
ex.printStackTrace();
}
this.launch();
}
/**Seten des GrundPanels auf das JApplet
*
*/
private void launch() {
pGround.removeAll();
pGround.add(PGround.getInstance());
PGround.getInstance().setSize(1000, 600);
validate();
}
/** This method is called from within the init() method to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
pGround = new javax.swing.JPanel();
pGround.setMaximumSize(new java.awt.Dimension(1000, 600));
pGround.setMinimumSize(new java.awt.Dimension(1000, 600));
pGround.setPreferredSize(new java.awt.Dimension(1000, 600));
javax.swing.GroupLayout pGroundLayout = new javax.swing.GroupLayout(pGround);
pGround.setLayout(pGroundLayout);
pGroundLayout.setHorizontalGroup(
pGroundLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 1010, Short.MAX_VALUE)
);
pGroundLayout.setVerticalGroup(
pGroundLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 611, Short.MAX_VALUE)
);
getContentPane().add(pGround, java.awt.BorderLayout.CENTER);
}// </editor-fold>
// Variables declaration - do not modify
private javax.swing.JPanel pGround;
// End of variables declaration
}
Die Klasse PGround enthält die Methode login() die noch einwandfrei funktioniert da das Login Panel dargestellt wird.
nun nach dem Login wird die Angesprochene Methode setPanel aufgeruffen, diesses Panel wird dan allerdings nichtmehr gewechselt.
[Java]
public class PGround extends javax.swing.JPanel {
private static PGround instance = null;
/** Creates new form PGround */
private PGround() {
initComponents();
this.login();
}
public static PGround getInstance() {
if (instance == null) {
instance = new PGround();
}
return instance;
}
/**
* Evaluierung welche Buttons in der Toolbar erscheinen
*/
public void setToolBaar() {
toolBar.setVisible(true);
luser.setText("Angemeldet als "+Config.getInstance().getUsername());
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
bgToolBar = new javax.swing.ButtonGroup();
toolBar = new javax.swing.JToolBar();
tbDossiers = new javax.swing.JToggleButton();
tbGebinde = new javax.swing.JToggleButton();
tbConsumer = new javax.swing.JToggleButton();
tbAdministration = new javax.swing.JToggleButton();
jPanel1 = new javax.swing.JPanel();
luser = new javax.swing.JLabel();
bLogOut = new javax.swing.JButton();
pGround = new javax.swing.JPanel();
Da ich's grad sehe: Du setzt oben die Größe eines Panels mit [c]setSize()[/c]. LayoutManager hast Du explizit auf [c]null[/c] gesetzt, oder liegt das Problem vielleicht an unterschiedlichen LayoutManagers?
Habe mit einer direckten grössenangabe bis jetzt die beste erfahrung gemacht.
Habe alle Panels die mir als Container dienen im NetBeans GUI Designer als BorderLayout definiert.
Das wird so nichts bringen, aber Du kannst es gern versuchen. Besser wäre es aber, den ganzen Krempel mal aufs nötigste zusammen zu stampfen; eine Klasse ggf. mit inneren Klassen. Wenn es damit funktioniert, dann findest Du den Fehler auf dem Weg vielleicht selber. Wenn nicht, dann können wir den Fehler genauer einschätzen.
String userName = tfUserName.getText();
String pw = new String(pfPassword.getPassword());
if (!userName.equals("") && !pw.equals("")) {
try {
if (MySQL.getInstance().getPassword(userName).equals(pw)) {
LoginValidate loginValidate = new LoginValidate();
tfUserName.setText("");
Config.getInstance().setUserName(userName);
lStatus.setText(loginValidate.validateUser());
} else {
lStatus.setText("Benutzername oder Password sind falsch");
}
} catch (SQLException ex) {
lStatus.setText("Es konnte keine Verbindung zur Datenbank hergestellt werden!");
}
} else {
lStatus.setText("Das Feld Benutzername und Passwort muss ausgefüllt werden");
}
}
[/code]
Hier noch die Validate Klasse die die auswahl übernimt welches Panel angezeigt wird.
und somit setPanel aufruft.
Sory Ebenius
Java:
public class LoginValidate {
/**Evaluierung welches Panel als Start angezeigt wird
*
* @return meldung bei nicht erfolgreicher Anmeldung
*/
public String validateUser() {
String retval = "";
int userTyp = -1;
String userName = Config.getInstance().getUsername();
String rollname = MySQL.getInstance().getRollname(Config.getInstance().getUsername());
int[] typ = MySQL.getInstance().getUserTyp(userName);
System.out.println("Typ: " + typ[0] + ":" + typ[1] + ":" + typ[2] + ":" + typ[3]);
if (MySQL.getInstance().getActivate(userName) == 1) {
if (typ[0] == 1) {
System.out.println("--> Benutzer ist Liferant");
if (MySQL.getInstance().getAuthConsumerArea(rollname) >= 1) {
userTyp = 0;
} else {
retval = "Sie haben kein Zugangsrecht";
}
}
if (typ[1] == 1) {
System.out.println("--> Benutzer ist Empfänger");
if (MySQL.getInstance().getAuthConsumerArea(rollname) >= 1) {
userTyp = 0;
} else {
retval = "Sie haben kein Zugangsrecht";
}
}
if (typ[2] == 1) {
System.out.println("--> Benutzer ist Handler");
if (MySQL.getInstance().getAuthConsumerArea(rollname) >= 1) {
userTyp = 0;
} else {
retval = "Sie haben kein Zugangsrecht";
}
}
if (typ[3] == 1) {
System.out.println("--> Benutzer ist Intern");
if (MySQL.getInstance().getAuthDossierArea(rollname) >= 1) {
userTyp = 1;
} else if (MySQL.getInstance().getAuthBundleArea(rollname) >= 1) {
} else {
retval = "Sie haben kein Zugangsrecht";
}
}
setStartPanel(userTyp);
} else {
retval = "Benutzer ist nicht mehr aktiv";
}
return retval;
}
/**Setzen des Ersten Panels
*
*/
public void setStartPanel(int userTyp) {
System.out.println("HALLO");
if (userTyp == 0) {
PGround.getInstance().setPanel(new PConsumerOverView());
} else if (userTyp == 1) {
PGround.getInstance().setPanel(new PDossier());
}
}
}
Ich habe meinen fehler, mit dem Beispiel selbst gefunden.
Könnte mich. Es hat Garnichts mit dem Panel Wechsel zu tun sondern mit der Datenbank Verbindung die aus dem JApplet nicht funktioniert.
Habe genau eine Exception unabsichtlich nicht nach aussen geführt und das hat mich jetzt Stunden und Nerven gekostet.