2016-05-07 7 views
0

Ich unten erstellen ich eine JFrame-Klasse (Nur die wichtigen Teile sind unten in der Klasse veröffentlicht). Beim Erstellen eines UserInterface-Objekts funktioniert alles, wenn Sie den EventListener aktivieren. Dieser Codeabschnitt:(Java GUI) JPanel wird nicht durch die Methode nach removeAll() Methode

getContentPane().removeAll(); 
getContentPane().add(gameScreen()); 
getContentPane().validate(); 
getContentPane().repaint(); 

scheint nicht zu funktionieren, wie gewünscht. Die removeAll() -Methode funktioniert, aber das Hinzufügen der gameScreen-Methode (die Panel zurückgibt) zu JFrame macht nichts. Irgendeine Idee warum?

public class UserInterface extends JFrame{ 

public UserInterface(){ 
    super("idk"); 
    setName("idk"); 
    setSize(WINDOW_WIDTH, WINDOW_HEIGHT); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setBackground(Color.WHITE); 
    setResizable(false); 
    setLocationRelativeTo(null); 
    add(startScreen()); 
    setVisible(true); 
}//UserInterface 

private class beginButtonListener implements ActionListener { 
    public void actionPerformed(ActionEvent e) { 
     getContentPane().removeAll(); 
     getContentPane().add(gameScreen()); 
     getContentPane().validate(); 
     getContentPane().repaint(); 
    } 
}//beginButtonListener 

public JPanel gameScreen(){ 

    JPanel gamePanel = new JPanel(); 
    gamePanel.setName("gamePanel"); 
    gamePanel.setLayout(null); 

    JLabel fadeShade = new JLabel(); 
    fadeShade.setName("fadeShade"); 
    fadeShade.setBackground(Color.BLUE); 
    fadeShade.setBounds(0, 0, WINDOW_WIDTH, WINDOW_HEIGHT); 
    gamePanel.add(fadeShade); 
    return gamePanel; 
}//gameScreen 
}//UserInterface 

Antwort

2

Ja, Ihr GamePanel wird wahrscheinlich hinzugefügt, aber Sie werden es nie sehen. Sie fügen ein JLabel ohne Text auf dem Etikett hinzu, und Sie legen die Hintergrundfarbe des Etiketts fest, ohne das Etikett undurchsichtig zu machen. Sie verwenden auch Null-Layouts, was sehr gefährlich ist.

Wenn dies mein Code, würde ich

  • ein Cardlayout verwenden Komponenten
  • Vermeiden null Layouts wie die Pest tauschen und stattdessen lassen Sie die Layout-Manager für mich das schwere Layout Hebe tun.
  • Stellen Sie sicher, dass Sie den Text eines beliebigen JLabels festlegen, der Text anzeigen soll. Die Namenseigenschaft von JLabel würde wahrscheinlich nicht viel helfen.
+0

Wow diese ganze Zeit war es ein sorgloser Fehler. Danke, dass du das unterstrichen hast! Ich werde diese Änderungen definitiv vornehmen. – Eric

Verwandte Themen