2017-11-01 12 views
1

GUIにメニューバーがあります。メニューは表示されません。Java - CardLayoutのメニューを表示

public class GUI extends JPanel implements ItemListener{ 

final static String RUN_TEST = "Test 4G"; 
final static String SETTINGS = "Settings"; 
JPanel p; 
JPanel cards = new JPanel(new CardLayout()); 
public GUI(){ 
    JFrame window = new JFrame(); 

    TestRun runTest = new TestRun(); 

    cards.add(runTest , RUN_TEST); 
    cards.add(runTest , SETTINGS); 

    CardLayout cl = (CardLayout)(cards.getLayout()); 
    cl.show(cards, RUN_TEST); 
    window.setContentPane(cards); 

    window.pack(); 
    window.setVisible(true); 
} 

@Override 
public void itemStateChanged(ItemEvent evt) { 
    CardLayout cl = (CardLayout)(cards.getLayout()); 
    cl.show(cards, (String)evt.getItem()); 
} 
} 

JPanelを変更できるようにするには、「テスト4G」と「設定」メニューをユーザーに表示するにはどうすればよいですか?あなたの助け

+0

ている、あなたは私がTestRunの一つの他のインスタンスを作成したcardlayout –

+0

の2箇所に一つのインスタンスを追加することはできませんаnd問題はまだここにあります。 JMenuBarとJMenuItemを使用してパネルを切り替える必要はありますか? – Ilan

+1

すぐに役立つように、[MCVE]または[短く、自己完結型、正しい例](http://www.sscce.org/)を投稿してください。 –

答えて

1

このため おかげでJFrameJMenuBarJPanel(ビュー)でJPopupMenuを使用した例です。

public class MainFrame extends JFrame { 
    final static String RUN_TEST = "Test 4G"; 
    final static String SETTINGS = "Settings"; 

    private JPanel viewPanel = new JPanel(); 

    public MainFrame() throws HeadlessException { 
     super("MainFrame"); 
     cretaeGUI(); 
    } 

    private void cretaeGUI() { 
     setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     setLayout(new BorderLayout()); 
     setJMenuBar(cretaeMenuBar()); 

     setMinimumSize(new Dimension(800, 600)); 

     viewPanel.setLayout(new CardLayout()); 
     viewPanel.add(new Test4GView(this), RUN_TEST); 
     viewPanel.add(new SettingsView(this), SETTINGS); 

     add(viewPanel, BorderLayout.CENTER); 

     pack(); 
     setLocationRelativeTo(null); 
    } 

    private JMenuBar cretaeMenuBar() { 
     JMenuItem testMenuItem = new JMenuItem("Test 4G"); 
     testMenuItem.addActionListener(this::showTest4GView); 

     JMenuItem settingsMenuItem = new JMenuItem("Settings"); 
     settingsMenuItem.addActionListener(this::showSettingsView); 

     JMenu viewMenu = new JMenu("View"); 
     viewMenu.add(testMenuItem); 
     viewMenu.add(settingsMenuItem); 

     JMenuBar menuBar = new JMenuBar(); 
     menuBar.add(viewMenu); 
     return menuBar; 
    } 

    private void showView(String name) { 
     ((CardLayout)viewPanel.getLayout()).show(viewPanel, name); 
    } 

    public void showTest4GView(ActionEvent event) { 
     showView(RUN_TEST); 
    } 

    public void showSettingsView(ActionEvent event) { 
     showView(SETTINGS); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(() -> new MainFrame().setVisible(true)); 
    } 
} 

は、これらはあなたがTestRunの2つのインスタンスを作成する必要があり、両方のビュー

public class Test4GView extends JPanel { 

    private MainFrame mainFrame; 

    public Test4GView(MainFrame mainFrame) { 
     this.mainFrame = mainFrame; 

     add(new JLabel("Test 4G")); 

     addMouseListener(new MouseAdapter() { 
      @Override 
      public void mousePressed(MouseEvent e) { 
       showPopupMenu(e); 
      } 

      @Override 
      public void mouseReleased(MouseEvent e) { 
       showPopupMenu(e); 
      } 

      private void showPopupMenu(MouseEvent e) { 
       if(!e.isPopupTrigger()) { 
        return; 
       } 

       JMenuItem showSettingsView = new JMenuItem("Settings"); 
       showSettingsView.addActionListener(mainFrame::showSettingsView); 

       JPopupMenu popupMenu = new JPopupMenu(); 
       popupMenu.add(showSettingsView); 

       popupMenu.show(e.getComponent(), e.getX(), e.getY()); 
      } 
     }); 
    } 
} 

public class SettingsView extends JPanel { 

    private MainFrame mainFrame; 

    public SettingsView(MainFrame mainFrame) { 
     this.mainFrame = mainFrame; 

     add(new JLabel("Settings")); 

     addMouseListener(new MouseAdapter() { 
      @Override 
      public void mousePressed(MouseEvent e) { 
       showPopupMenu(e); 
      } 

      @Override 
      public void mouseReleased(MouseEvent e) { 
       showPopupMenu(e); 
      } 

      private void showPopupMenu(MouseEvent e) { 
       if(!e.isPopupTrigger()) { 
        return; 
       } 

       JMenuItem showSettingsView = new JMenuItem("Test 4G"); 
       showSettingsView.addActionListener(mainFrame::showTest4GView); 

       JPopupMenu popupMenu = new JPopupMenu(); 
       popupMenu.add(showSettingsView); 

       popupMenu.show(e.getComponent(), e.getX(), e.getY()); 
      } 
     }); 
    } 
} 
+0

ご協力いただきありがとうございます。私はcardLayoutの使用をより良く理解しています。私はあなたの例を試して、それは働いています。 – Ilan

関連する問題