2015-07-05 88 views
0

我想写一个程序,在任何时候都有2个面板。左面板将是一个带按钮的菜单,而右面板将根据面板中按下的按钮而改变。2帧内的Jpanels。左面板是带按钮的菜单。使用按钮切换右侧面板。

现在我被卡住了。当点击“recipeRolodexButton”时没有任何事情发生。我想要发生的是,右侧面板要么被移除并替换为我的面板方法,要么被另一个面板覆盖。

public class Window extends JFrame implements ActionListener{ 


private static final long serialVersionUID = 1L; 


//Buttons 
     JButton recipeRolodexButton = new JButton("Recipe Rolodex"); 
     JButton groceryFinanceButton = new JButton("Grocery Finance"); 
     JButton testButton1 = new JButton("Test Button"); 

     JPanel homeLeftPanel = new JPanel(); 

     JPanel homeRightPanel = new JPanel(); 
     RolodexOptionsPane rop = new RolodexOptionsPane(); 

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

    public Window(){ 

    //declarations 
    Toolkit tk = Toolkit.getDefaultToolkit(); 
    Dimension dim = new Dimension();   
    dim = tk.getScreenSize(); 
    GridBagConstraints gbcl = new GridBagConstraints(); 



    //setting up the window 
    this.setVisible(true); 
    this.setSize(550,300); 
    this.setDefaultCloseOperation(EXIT_ON_CLOSE); 
    this.setTitle("Food Management");  
    int xPosition = ((dim.width/2) - this.getWidth()/2); 
    int yPosition = ((dim.height/2) - (this.getHeight()/2)); 
    this.setLocation(xPosition, yPosition); 
    this.setLayout(new GridBagLayout()); 
    this.setResizable(false); 

     //Add Action Listeners 
     recipeRolodexButton.addActionListener(this);; 
     groceryFinanceButton.addActionListener(this); 
     testButton1.addActionListener(this); 

     //Setting up Main Panels 
     homeLeftPanel.setBackground(Color.BLUE); 
     homeLeftPanel.setLayout(new GridBagLayout()); 
     homeRightPanel.setBackground(Color.BLACK); 
     homeRightPanel.setLayout(new GridBagLayout()); 

    // setting the Button constraints in the main Left Panel buttons 
    gbcl.anchor = GridBagConstraints.CENTER; 
    gbcl.fill = GridBagConstraints.HORIZONTAL; 
    gbcl.gridy = 0; 
    gbcl.gridx = 0;    
    gbcl.ipady = 4; 
    gbcl.insets = new Insets(15,0,0,0); 
    homeLeftPanel.add(recipeRolodexButton,gbcl);     
    gbcl.gridy = 1; 
    homeLeftPanel.add(groceryFinanceButton, gbcl);    
    gbcl.gridy = 2; 
    homeLeftPanel.add(testButton1, gbcl); 

    // setting up the buttons in the main right panel 



    // EXECUTION!!!!!!!!!!!! 
    PanelSet(homeLeftPanel,homeRightPanel);  

} 

public void PanelSet(JPanel left , JPanel right){ 

    GridBagConstraints gbcLeft = new GridBagConstraints(); 
    GridBagConstraints gbcRight = new GridBagConstraints(); 

    //positioning the panels   
      gbcLeft.fill = GridBagConstraints.BOTH; 
      gbcLeft.gridx = 0; 
      gbcLeft.gridy = 0; 
      gbcLeft.weightx = .15; 
      gbcLeft.weighty = .5;    

      gbcRight.fill = GridBagConstraints.BOTH; 
      gbcRight.gridx = 1; 
      gbcRight.gridy = 0; 
      gbcRight.weightx = .85; 


this.add(left,gbcLeft); 
this.add(right,gbcRight); 
} 


public void actionPerformed(ActionEvent e) { 
    if(e.getSource() == recipeRolodexButton){ 
     PanelSet(recipeRolladexButton,rop); 

    } 

} 



} 

对于间距抱歉。当复制我的代码时,缩进失去了。

+0

'当复制我的代码时,缩进丢失了。 - 修复您的代码。请使用所有空格或全部选项卡,但不要混合使用这两个选项卡。另外方法名称不应以大写字符开头。不要称你为课堂“窗口”。这个名称有一个AWT类可能导致混淆。选择一个更具描述性的名字。 – camickr

回答

2

而右侧面板将根据在任一面板中按下的按钮而改变。

您应该使用右侧面板的Card Layout。然后当你点击一个按钮时,你只需指定要显示的面板的名称,剩下的就是CardLayout

本教程有一个工作示例,演示如何在从组合框中选择项目时交换面板。