2013-12-16 17 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生成器,所以它很難嘗試解決您的問題 –