# Buttons entfernen / hinzufügen



## Bud (11. Apr 2012)

Hallo Leute! 

Ich habe leider ein Problem. Ich habe ein kleines Login-Interface gebastelt und wenn der Login durchgeführt wurde, soll sich das Fenster verändern und neue Buttons (und ähnliche ELemente) sollen angezeigt werden.

Buttons entfernen ist kein Problem - das funktioniert. Aber wenn ich neue Buttons mit einem Actionlistener hinzufügen will, passiert scheinbar nichts. Erst wenn ich den Rand des Fensters anklicke (!) erscheinen die Buttons.. Komisch, oder? 

Habt ihr eine AHnung, was ich falsch mache?


```
public class mv_RMI_transfer_test extends JFrame implements ActionListener {
	    
	private static final Color black = null;
	// Die grafischen Elemente werden global deklariert - damit auch das Actionevent diese behandeln kann
		
	    private JButton button2;
	    private JTextArea jta1;
	    mv_RMI_transfer_test pane;
	    GridBagConstraints gBC;
	    
	    private JList themenAuswahl;
	    
	    public mv_RMI_transfer_test(){
	    	
	        pane = this; // ?? Wurde so von Eclipse angeboten
		pane.setLayout(new GridBagLayout());
	        gBC = new GridBagConstraints();
	        gBC.fill = GridBagConstraints.HORIZONTAL;

	        //--------------------------
	        //---- Username Field
	        //--------------------------

	        jta1 = new JTextArea(1,10);
	        gBC.gridx = 2;
	        gBC.gridy = 0;
	        jta1.setEditable(true);
		jta1.setBorder(BorderFactory.createLineBorder(black));
	        pane.add(jta1, gBC);
	      
	        //--------------------------
	        //---- Login button
	        //--------------------------

	        button2 = new JButton("Login");
	        gBC.weightx = 0.0;
	        gBC.gridwidth = 3;
	        gBC.gridx = 0;
	        gBC.gridy = 3;
	        gBC.insets = new Insets(3,30,3,30);
	        button2.addActionListener(this); 
	        this.getContentPane().add(button2);
	        pane.add(button2, gBC);
	        
	        //-------------------------------------------------
	        //------ 2nd Screen -------------------------------
	        //-------------------------------------------------
	        
	        Font font2 = new Font("SansSerif", Font.BOLD, 14);
	         tf4 = new JTextField("Please choose: ");
	         gBC.gridx = 0;
		 gBC.gridy = 1;
		 gBC.insets = new Insets(30,3,3,3);
		 tf4.setEditable(false);
		     
		    //-------------------------------------------------
		    //------  List -------------------------------
		    //-------------------------------------------------
		     
		        // Array für unsere JList
		        String votings[] = {"111", "2j2", "3j33"};
		 
		        //JList mit Einträgen wird erstellt
		         themenAuswahl = new JList(votings);
		         gBC.gridx = 0;
			 gBC.gridy = 2;
			 gBC.insets = new Insets(30,30,30,30);
	    }
	    
	    public void actionPerformed(ActionEvent e) {
	    	System.out.println("ActionPerformed!");
	         if(e.getSource() == button2)
	         {
		            pane.remove(jta1);
		            pane.remove(button2);
		          
		            pane.add(tf4);
		            pane.add(themenAuswahl);
		            
		            pane.repaint();      
	         }
	    } // void actionPerformed	      
	    
	    public static void main(String[] args){
	        mv_RMI_transfer_test bec = new mv_RMI_transfer_test();
	        bec.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	        bec.setSize(400, 400);
	        bec.setVisible(true);
	    } // void main
	}// class
```


----------



## bERt0r (11. Apr 2012)

Entferne keine Buttons, benutze ein CardLayout.


----------



## njans (11. Apr 2012)

Nebenbei: Java Conventions
Die ganzen Unterstriche und Java-untypischen Klassennamen sollten doch nicht sein


----------



## Bud (11. Apr 2012)

Moin Leute! 

Ja, das mit den Conventions ist so eine Sache.. Ich gelobe Besserung.. 

Das Cardlayout kannte ich noch gar nicht - Aber mir kommt es so vor, dass ich im cardlayout nicht so viele Layout-Möglichkeiten wie gridbaglayout habe, oder?

Aber wieso funktioniert es mit pane.remove(button) nicht?


----------



## vanny (11. Apr 2012)

Was hindert dich daran, bei den Karten jeweils mit einem anderen LayoutManager zu arbeiten?


----------



## L-ectron-X (11. Apr 2012)

Bud hat gesagt.:


> Aber wieso funktioniert es mit pane.remove(button) nicht?


Wahrscheinlich musst du validate() aufrufen nicht repaint().


----------

