# JScrollPane oder ähnliches in Applet einfügen



## Paule (11. Mrz 2005)

Hallo,

mein Problem ist folgendes: Ich hab mir ein Applet geschrieben, was soweit auch ganz gut funktioniert. Zur Laufzeit des Applets kann man Komponenten (JTextField, JCheckBox usw) hinzufügen. Somit kann es passieren, dass die Größe des Applets größer ist als der sichtbare Bereich im Browser.
Deswegen hab ich nun ein JScrollPane eingefügt. Mein Problem ist nun, dass Button-Klicks seitdem keine Reaktionen mehr verursachen. Hier mein Quellcode:


```
public class Editor extends JApplet {
	   JPanel activeView; // aktives JPanel
	   JScrollPane spactiveView; 
	   
	   public void init() {
	      activeView = new Login(this);
	      spactiveView = new JScrollPane(activeView); // aktives JPanel in JScrollPane einfügen
	      getContentPane().add(spactiveView); // JScrollPane einfügen
	      
	   }
	   
	   public void changeView(JPanel p) {
	      remove(activeView);
	      activeView = p;
	      spactiveView.add(activeView); // aktives JPanel in JScrollPane einfügen
	      getContentPane().add(spactiveView); // JScrollPane einfügen
	      validate();
	   }
	}
```

Die Klasse Login erbt von JPanel. Ich hab denn noch weitere JPanels die durch Button-Klicks angezeigt werden. Der Code dafür sieht so aus:


```
public class Login extends JPanel implements ActionListener {
	   JLabel username;
	   JLabel password;
	   JTextField nName;
	   JPasswordField pwort;
	   JButton login;
	   JButton reg;
	   Editor owner;

	   public Login(Editor owner) {
	      this.owner = owner;

	      setLayout(new GridLayout(3,2,10,10));
	      setPreferredSize(new Dimension(400, 200));
	     
	      username = new JLabel("Nutzername: ");
	      password = new JLabel("Passwort: ");
	      nName = new JTextField(10);
	      pwort = new JPasswordField(10);
	      login = new JButton("Login");
	      reg = new JButton("neu registrieren");
	     
	      login.addActionListener(this);
	      reg.addActionListener(this);
	     
	      add(username);
	      add(nName);
	      add(password);
	      add(pwort);
	      add(login);
	      add(reg);
	   }
	     
	   public void actionPerformed(ActionEvent evt) {
	    Object source = evt.getSource();  
	   	if (source == login)
	         owner.changeView(new MainWindow(owner)); // MainWindow ist dann ein weiteres JPanel
	   }
	}
```

Wie gesagt, seitdem ich das JScrollPane eingefügt habe, tut sich nichts mehr, wenn ich auf den login-Button klicke. 
Muss ich denn das JScrollPane mit übergeben? Oder wo liegt der Fehler.

Vielleicht kann mir ja jemand helfen, wäre nett. Vielen Dank schon einmal im Voraus!

Gruß Paule!!


----------



## Paule (11. Mrz 2005)

Ich bin's wieder. Hab jetzt mal bisschen was verändert.

Dabei entstand ne gute und ne schlechte Nachricht. Die gute: Die Buttons funktionieren wieder. Die schlechte: Ne Scroll-Leiste hab ich immer noch nicht  :cry: 

Hier mein veränderter Code:


```
public class Editor extends JApplet {
	   JPanel activeView; // aktives JPanel
	    
	   
	   public void init() {
	      activeView = new Login(this);
	      getContentPane().add(activeView); // JPanel einfügen
	      
	   }
	   
	   public void changeView(JPanel p) {
	      remove(activeView);
	      activeView = p;
	      getContentPane().add(activeView); // JPanel einfügen
	      validate();
	   }
	}
```


```
public class Login extends JPanel implements ActionListener {
	   JLabel username;
	   JLabel password;
	   JTextField nName;
	   JPasswordField pwort;
	   JButton login;
	   JButton reg;
	   Editor owner;
	   JPanel LoginPanel;  // in dieses JPanel werden alle Komponenten eingefügt

	   public Login(Editor owner) {
	      this.owner = owner;
	      LoginPanel = new JPanel();

	      LoginPanel.setLayout(new GridLayout(3,2,10,10));
	      setPreferredSize(new Dimension(400, 200));
	     
	      
	      username = new JLabel("Nutzername: ");
	      password = new JLabel("Passwort: ");
	      nName = new JTextField(10);
	      pwort = new JPasswordField(10);
	      login = new JButton("Login");
	      reg = new JButton("neu registrieren");
	     
	      login.addActionListener(this);
	      reg.addActionListener(this);
	     
	      LoginPanel.add(username);
	      LoginPanel.add(nName);
	      LoginPanel.add(password);
	      LoginPanel.add(pwort);
	      LoginPanel.add(login);
	      LoginPanel.add(reg);
	      
	      add(new JScrollPane(LoginPanel)); //hier wird das JScrollPane eingefügt
	      
	      
	   }
	     
	   public void actionPerformed(ActionEvent evt) {
	    Object source = evt.getSource();  
	   	if (source == login)
	         owner.changeView(new MainWindow(owner)); 
	   }
	}
```

Tja und nun die Frage: Warum erscheint kein Scroll-Balken?? Ich kann die Applet-Größe so klein machen wie ich will, es erscheint kein Balken.

Bitte helft mir !!

Paule!


----------



## Paule (12. Mrz 2005)

Hi,

das Problem ist denn jetzt gelöst. Ich hatte in der Klasse Editor ne falsche Methode benutzt. 
Anstatt


```
spactiveView.add(activeView);
```

musste ich folgende Methode benutzen


```
spactiveView.setViewportView(activeView);
```

Jetzt läuft es bestens tschau!!!


----------

