2016-04-10 19 views
-1

In meinem Code habe ich einen JFrame, der ein Hauptmenü öffnet, in diesem Menü können Sie Optionen anklicken, die Sie zum Optionsmenü bringen. In diesem Optionsmenü möchte ich eine Zurück-Schaltfläche erstellen, die sich irgendwo in der oberen linken Ecke des Bildschirms positioniert. Wenn ich das Programm starte und zum Optionsmenü gehe, erscheint die JButton nicht. Irgendetwas muss mit meinem Code falsch sein. Irgendeine Hilfe? Unten erkläre ich das JButton.JButton Positionierung, erscheint nicht

static JButton optionsBackButton = new JButton("<html><font size = 5 
      color = green>Back</font></html>"); 

Hier ist der andere Teil des Codes, der mit dem JButton zu tun hat.

//Options Menu 
    JPanel optionsPanel = new JPanel(); 
    JLabel optionsOptionsTitle = new JLabel("<html><font size = 7 color = blue>Options</font></html>"); 
    JPanel optionsOptionsTitlePanel = new JPanel(); 
    JPanel optionsBackButtonPanel = new JPanel(); 

    optionsPanel.setLayout(null); 
    optionsBackButton.setBounds(100,100,50,50); 

    optionsBackButtonPanel.add(optionsBackButton); 
    optionsOptionsTitlePanel.add(optionsOptionsTitle); 
    optionsPanel.add(optionsOptionsTitlePanel); 
    optionsPanel.add(optionsBackButtonPanel); 

    optionsBackButton.addActionListener(this); 

    //Add panels to the card 
    panel.add("Home Screen", homePanel); 
    panel.add("Options Menu", optionsPanel); 
    //card.add("Game screen", gamePanel); 
    cardLayout.show(panel, "HomeScreen"); 
    contentPane.add(panel); 
+0

Sie viel haben zu korrigieren, einschließlich Übernutzung von statischen Feldern, die Verwendung von JFrame, wo ein JDialog wahrscheinlich verwendet werden soll, und am wichtigsten, die Verwendung von 'null' Layouts und' setBounds (...) 'wo sollten Sie gültige Layout-Manager verwenden. Um jedoch eine vollständigere Hilfe zu erhalten, poste deine beste [mcve] und lass uns dir helfen, dies zu verbessern. –

Antwort

2

Ihr Problem aus Ihrer Nutzung null Layouts wird ergeben. Hinweis:

JPanel optionsBackButtonPanel = new JPanel(); // holds the back button 
               // but never given a size 

optionsPanel.setLayout(null); // uh oh,.... bad news 
optionsBackButton.setBounds(100,100,50,50); // yes you set the bounds of the button 

optionsBackButtonPanel.add(optionsBackButton); 
optionsOptionsTitlePanel.add(optionsOptionsTitle); 
optionsPanel.add(optionsOptionsTitlePanel); 
optionsPanel.add(optionsBackButtonPanel); // again, optionsBackButtonPanel 
           // has been never given a size or location/bounds 

optionsBackButton.addActionListener(this); 

So setzen Sie die Grenzen der Schaltfläche und fügen Sie ihn in ein JPanel, die den Standard FlowLayout verwendet, und so sind die Grenzen bedeutungslos. Dann fügen Sie JPanel, dessen Grenzen Sie nie festgelegt haben, zu einem JPanel hinzu, das das Null-Layout verwendet. Das optionsBackButtonPanel wird also nie angezeigt.

Lösung: Verwenden Sie keine Null-Layouts, sondern lernen und verwenden Sie stattdessen die Layout-Manager.

Während Null-Layouts und setBounds() Swing-Neulinge scheinen wie die einfachste und beste Möglichkeit, komplexe GUI's zu erstellen, desto mehr Swing GUI'S erstellen Sie die ernsteren Schwierigkeiten, die Sie stoßen, wenn Sie sie verwenden. Sie werden die Größe Ihrer Komponenten nicht ändern, wenn die GUI die Größe ändert, sie sind eine royale Hexe, die verbessert oder beibehalten wird, sie scheitern komplett, wenn sie in Scrollpanels platziert werden. Sie sehen auf allen Plattformen oder Bildschirmauflösungen, die sich vom Original unterscheiden, grässlich aus .

startet hier: Laying Out Components in a Container Tutorial