2017-05-30 3 views
1

Ich muss in ein JFrame, ein JPanel einer anderen Klasse einfügen. Ich habe ein JMenuItem in den JFrame und ich will das, wenn ich auf das JMenuItem klicke, erscheint das JPanel.Setzen Sie eine JPanel-Klasse in einen JFrame einer anderen Klasse

private void searchStudMenuItemActionPerformed(java.awt.event.ActionEvent evt) {             
     searchStud s = new searchStud(); 
     s.setVisible(true); 
     changePanel(s); 
    }             

    private void changePanel(JPanel panel) { 
     getContentPane().removeAll(); 
     getContentPane().add(panel); 
     getContentPane().doLayout(); 
     update(getGraphics()); 
    } 

searchStud ist die Klasse, die das JPanel enthält. Wenn ich das Programm ausführen und ich auf das JMenuItem klicke, passiert nichts ... Ich habe versucht, online zu suchen, aber was ich finde, funktioniert nicht.

+0

können Sie benutzen Sie bitte 'invalidate(); validate(); ', nach dem' update (getGraphics()); ' –

+0

erledigt, aber nichts passiert ... Ich habe versucht, einen String in der Konsole zu drucken, um zu sehen, ob der JPanel erreicht wurde und tatsächlich erreicht wird, aber nicht gezeigt im Video –

Antwort

2

Die eigentliche Komponente - ein JFrame nehme ich an - geändert wurde, muss es erneut validiert werden:

private void changePanel(JPanel panel) { 
    getContentPane().removeAll(); 
    getContentPane().add(panel); 
    revalidate(); 
} 

Nur mit diesem minimalen Code getestet:

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.SwingUtilities; 


@SuppressWarnings("serial") 
public class Test extends JFrame { 

    public static void main(String[] args) { 
     new Test(); 
    } 


    private static class searchStud extends JPanel { 
     searchStud() { 
      add(new JLabel("SEARCH STUD")); 
     } 
    } 


    private Test() { 
     SwingUtilities.invokeLater(this::initGUI); 
    } 

    private void initGUI() { 
     JButton button = new JButton("Search"); 
     button.addActionListener(this::searchStudMenuItemActionPerformed); 

     setDefaultCloseOperation(DISPOSE_ON_CLOSE); 
     add(button); 
     setSize(300, 200); 
     validate(); 
     setLocationRelativeTo(null); 
     setVisible(true); 
    } 

    private void searchStudMenuItemActionPerformed(java.awt.event.ActionEvent evt) {             
     searchStud s = new searchStud(); 
     s.setVisible(true); 
     changePanel(s); 
    }             

    private void changePanel(JPanel panel) { 
     getContentPane().removeAll(); 
     getContentPane().add(panel); 
     revalidate(); 
    } 
} 
+0

Verwenden Sie revalidate(). validate() ist die ältere AWT-Methode. revalidate() ist die neuere Methode, die für Swing hinzugefügt wurde. – camickr

+0

@camickr aktualisiert ... danke –

+0

es funktioniert! Vielen Dank! :) –

Verwandte Themen