2017-05-30 7 views
1

別のクラスのJPanelであるJFrameに挿入する必要があります。 私はJFrameにjMenuItemを持っていますが、私はJMenuItemをクリックするとJPanelが表示されます。JPanelクラスを別のクラスのJFrameに入れよう

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は、JPanelを含むクラスです。 私はプログラムを実行し、JMenuItemをクリックすると何も起こりません... 私はオンラインで検索しようとしましたが、私が見つけたものは動作しません。

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

はちょうどこの最小限のコードでテスト:

+0

は、あなたが( '無効化を使用してくださいすることができます)。 –

+0

完了しましたが、何も起こりません... JPanelに達して実際には到達したかどうかを確認するためにコンソールに文字列を表示しようとしましたが、実際には到達していません。ビデオに表示 –

答えて

2

実際のコンポーネント - - 私が思うのJFrameは、それが再検証されなければならない、変更された

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

revalidate()を使用してください。 validate()は古いAWTメソッドです。 revalidate()はSwing用に追加された新しいメソッドです。 – camickr

+0

@camickrが更新されました...ありがとうございます –

+0

それは動作します!ありがとう! :) –

関連する問題