2013-12-16 15 views
-1

以下介绍如何从菜单项更改卡布局。我问过早些时候怎么做,但没有运气。我已经找出答案,所以这是它的作用; 1.在运行java文件时构建主框架。然后在菜单栏中,它允许你切换JPanels(在这个例子中,welcome是一个包中的一个不同的公共类)。2.现在你可以根据需要构建尽可能多的公共类,并且仍然可以访问该JPanel。Java中的交换卡布局

import java.awt.BorderLayout; 
import java.awt.CardLayout; 
import java.awt.EventQueue; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.io.IOException; 

import javax.swing.JFrame; 
import javax.swing.JMenu; 
import javax.swing.JMenuBar; 
import javax.swing.JMenuItem; 
import javax.swing.JPanel; 

public class ArmyQuestions { 

    CardLayout cards; 
    JPanel cardPanel; 

    public static void main(String[] args) throws IOException { 

     //Use the event dispatch thread for Swing components 
     EventQueue.invokeLater(new Runnable() 
     { 

      @Override 
      public void run() 
      { 

       new ArmyQuestions();   
      } 
     }); 

    } 

    public ArmyQuestions() 
    { 

     JFrame mainFrame = new JFrame(); 

     //make sure the program exits when the frame closes 
     mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     mainFrame.setTitle("Army Questions"); 
     mainFrame.setSize(797,510); 

     //This will center the JFrame in the middle of the screen 
     mainFrame.setLocationRelativeTo(null); 
     mainFrame.getContentPane().setLayout(new BorderLayout()); 

     //Adds a menu bar 
     JMenuBar menuBar = new JMenuBar(); 
     mainFrame.getContentPane().add(menuBar, BorderLayout.NORTH); 

     //Adds a menu option 
     JMenu mnFile = new JMenu("File"); 
     menuBar.add(mnFile); 

     //Adds an item to the menu option 
     JMenuItem mntmNew = new JMenuItem("New"); 
     mnFile.add(mntmNew); 
     mntmNew.addActionListener(new ActionListener() 
     { 
      @Override 
      public void actionPerformed(ActionEvent arg0) 
      { 
       cards.show(cardPanel, "Welcome"); 
      } 
     }); 

     //Adds cardpanel to getContentPane   
     cards = new CardLayout(); 
     cardPanel = new JPanel(); 
     cardPanel.setLayout(cards); 
     mainFrame.getContentPane().add(cardPanel,BorderLayout.CENTER); 

     //Adds a JPanel to your cardpanel 
     Welcome welcome = new Welcome(); 
     cardPanel.add(welcome, "Welcome"); 

     mainFrame.setVisible(true); 


    } 
} 
+1

请编辑下你的代码,删除不相关的问题的任何代码。此外,你有什么_exact_问题? –

+0

我已经回答了我自己的问题并发布了答案。 –

回答

2

我看到的两件事。

  1. 你有SuggestedQuesion_2全局声明然后你创建一个全新的方法。 JPanel SuggestedQuestion_2 = new JPanel();
  2. 我看到一个CardLayout为您的Welcome - Welcome.setLayout(new CardLayout(0, 0));,但不是为你SuggestedQuestion_2。然而,你正在试图访问SuggestedQuestionsCardLayout

你应该学会如何张贴SSCCE所以这是我们更容易看到问题。此外,在尝试将问题重新创建为更小,可运行的版本时,您有时会自己找出解决方案。

并请使用小写字母的参考变量的第一个字母遵循Java命名约定

+0

我会推荐学习手写摆动程序。您将学习许多有助于您在使用GUI构建工具进行创建时的帮助。请参阅[Swing教程](http://docs.oracle.com/javase/tutorial/uiswing/) –

+0

我不习惯使用GUI生成器,所以它很难尝试解决您的问题 –