一个框架内的2个Jpanel。左侧面板是带按钮的菜单。使用按钮切换右面板。

时间:2015-07-05 22:55:13

标签: java swing jframe jpanel containers

我正在尝试编写一个程序,其中始终有2个面板。左侧面板将是一个带按钮的菜单,而右侧面板将根据任一面板中按下的按钮而改变。

现在我被卡住了。点击“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);

    }

}



}

抱歉间距。复制我的代码时,缩进就丢失了。

1 个答案:

答案 0 :(得分:2)

  

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

您应该在右侧面板中使用Card Layout。然后,当您单击按钮时,您只需指定要显示的面板的名称,CardLayout将完成剩下的工作。

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