还有另一种方法可以为CardLayout制作下一个和上一个按钮吗?

时间:2014-08-25 08:14:10

标签: java swing cardlayout

我很难调试我的代码,我想彻底改变我的代码,到目前为止,我有这个:

    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.*;
    import javax.swing.border.BevelBorder;
    import javax.swing.border.Border;
    import javax.swing.border.EmptyBorder;

    public class gridbaglayoutdemo {
            JFrame Card = new JFrame();

            FlowLayout flow = new FlowLayout(FlowLayout.RIGHT,2,2);
            Border etch = BorderFactory.createEtchedBorder(Color.white,Color.gray);
            Border margin = new EmptyBorder(10,10,10,10);

            public static GridBagLayout grid = new GridBagLayout();
            GridBagConstraints c = new GridBagConstraints();
            final static boolean shouldFill = true;

            JPanel container;
            JPanel divider = new JPanel();
            JPanel bodypanel = new JPanel();
            final JPanel buttonpanel = new JPanel();
            JPanel panel_1 = new JPanel();
            JPanel panel_2 = new JPanel();
            JPanel panel_3 = new JPanel();
            CardLayout cl = new CardLayout();

            JTextArea text_2;
            JTextArea text_3;


            String change = "Finish";
            final JButton btnNext;
            final JButton btnBack;
            int currentCard = 0;
            int cardflag = 0;

            AbstractAction backAction;
            AbstractAction nextAction;

        public gridbaglayoutdemo(){

                    Card.setVisible(true);
                    Card.setSize(605,333);
                    Card.setTitle("Tank Delivery");
                    Card.setResizable(false);

                    final Toolkit toolkit = Toolkit.getDefaultToolkit();
                    Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();      
                    int x=(int)((dimension.getWidth() - Card.getWidth())/2);
                    int y=(int)((dimension.getHeight() - Card.getHeight())/2);

                Card.setLocation(x, y);
                Card.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);


                bodypanel.setLayout(new BorderLayout());

                divider.setLayout(new BorderLayout());
                container = new JPanel(cl);
                container.setLayout(cl);
                cl.show(container, "1");

                panel_1.setLayout(grid);

                JLabel label_1 = new JLabel("Enter 1:");
                label_1.setFont(new Font("Arial", Font.PLAIN, 18));
                c.fill = GridBagConstraints.HORIZONTAL;
                    c.weightx = 0.5;
                    c.weighty = 0;
                    c.gridx = 0;
                    c.gridy = 0;
                    c.insets = new Insets(10,10,0,0);
                panel_1.add(label_1, c);

                JComboBox box_1 = new JComboBox();
                box_1.setPreferredSize(new Dimension(200,30));
                c.fill = GridBagConstraints.HORIZONTAL;
                    c.weightx = 0.5;
                    c.weighty = 0;
                    c.gridx = 0;
                    c.gridy = 1;
                    c.insets = new Insets(10,10,0,0);
                panel_1.add(box_1,c);

                JLabel label = new JLabel("");
                label.setFont(new Font("Arial", Font.PLAIN, 18));
                c.fill = GridBagConstraints.HORIZONTAL;
                    c.weightx = 0.5;
                    c.weighty = 1;
                    c.gridx = 0;
                    c.gridy = 2;
                    c.insets = new Insets(10,0,0,0);
                panel_1.add(label, c);


                panel_2.setLayout(grid);

                JLabel label_2 = new JLabel("Enter 2:");
                label_2.setFont(new Font("Arial", Font.PLAIN, 18));
                c.fill = GridBagConstraints.HORIZONTAL;
                    c.weightx = 0.5;
                    c.weighty = 0;
                    c.gridx = 0;
                    c.gridy = 0;
                    c.insets = new Insets(10,10,0,0);
                panel_2.add(label_2,c);

                text_2 = new JTextArea();
                text_2.setPreferredSize(new Dimension(200,30));
                c.fill = GridBagConstraints.HORIZONTAL;
                    c.weightx = 0.5;
                    c.weighty = 0;
                    c.gridx = 0;
                    c.gridy = 20;
                    c.insets = new Insets(10,10,0,0);
                panel_2.add(text_2,c);

                JLabel label_22 = new JLabel("");
                label_22.setFont(new Font("Arial", Font.PLAIN, 18));
                c.fill = GridBagConstraints.HORIZONTAL;
                    c.weightx = 0.5;
                    c.weighty = 1;
                    c.gridx = 0;
                    c.gridy = 30;
                    c.insets = new Insets(10,0,0,0);
                panel_2.add(label_22, c);


                panel_3.setLayout(grid);

                JLabel label_3 = new JLabel("Enter 3:");
                label_3.setFont(new Font("Arial", Font.PLAIN, 18));
                c.fill = GridBagConstraints.HORIZONTAL;
                    c.weightx = 0.5;
                    c.weighty = 0;
                    c.gridx = 0;
                    c.gridy = 0;
                    c.insets = new Insets(10,10,0,0);
                panel_3.add(label_3,c);

                text_3 = new JTextArea();
                text_3.setPreferredSize(new Dimension(200,30));
                c.fill = GridBagConstraints.HORIZONTAL;
                    c.weightx = 0.5;
                    c.weighty = 0;
                    c.gridx = 0;
                    c.gridy = 20;
                    c.insets = new Insets(10,10,0,0);
                panel_3.add(text_3,c);

                JLabel label_33 = new JLabel("");
                label_33.setFont(new Font("Arial", Font.PLAIN, 18));
                c.fill = GridBagConstraints.HORIZONTAL;
                    c.weightx = 0.5;
                    c.weighty = 1;
                    c.gridx = 0;
                    c.gridy = 30;
                    c.insets = new Insets(10,0,0,0);
                panel_3.add(label_33, c);

                buttonpanel.setLayout(new FlowLayout(SwingConstants.RIGHT));
                buttonpanel.setBorder(new EmptyBorder(0,10,0,0));


                buttonpanel.setLayout(new FlowLayout(SwingConstants.RIGHT));
                buttonpanel.setBorder(new EmptyBorder(0,0,0,0));

                    btnBack = new JButton("< Back");
                    btnBack.addActionListener(new ActionListener() {
                            public void actionPerformed(ActionEvent e) {
                                    cl.previous(container);
                                    buttonpanel.repaint();
                                    cardflag--;
                                    if (cardflag==0)
                                    {btnBack.setEnabled(false);}
                                    if(cardflag<3)
                                    {btnNext.setText("Next >");}
                            }   
                    });
                    btnBack.setEnabled(false);
                buttonpanel.add(btnBack);

                    btnNext = new JButton("Next >");
                    btnNext.addActionListener(new ActionListener() {
                            public void actionPerformed(ActionEvent e) {
                                    cl.next(container);
                                    buttonpanel.repaint();

                                    cardflag++;
                                    if(cardflag<3)
                                    {btnBack.setEnabled(true);}
                                    if(cardflag==2)
                                    {btnNext.setText(change);}
                                    if (cardflag==3)
                                    {cl.show(container, "3");
                                    JOptionPane.showMessageDialog(null, "DONE");
                                    Window dialog = SwingUtilities.windowForComponent( btnNext );
                                    dialog.dispose(); 
                                    cardflag=0;
                                    btnNext.setText("Next >");
                                    }

                                    validateText();


                            }   
                    });
                    btnNext.setVisible(true);
                buttonpanel.add(btnNext);

                    final JButton btnCancel = new JButton("Cancel");
                    btnCancel.addActionListener(new ActionListener() {
                            public void actionPerformed(ActionEvent e) {
                                cardflag=0;
                                    Window dialog = SwingUtilities.windowForComponent( btnCancel );
                                    dialog.dispose(); 
                            }   
                    });
                buttonpanel.add(btnCancel);

                JPanel numberpanel = new JPanel();
                numberpanel.setPreferredSize(new Dimension(221,0));
                numberpanel.setBorder(new EmptyBorder(10,0,0,10));
                numberpanel.setBorder(BorderFactory.createEtchedBorder(Color.white,Color.gray));
                numberpanel.setLayout(flow);

                    JButton button_7 = new JButton("7");
                    button_7.addActionListener(new ActionListener() {
                            public void actionPerformed(ActionEvent e) {
                            buttonaction(e);
                            }   
                    });
                    button_7.setActionCommand("7");
                numberpanel.add(button_7);

                JButton button_8 = new JButton("8");
                    button_8.addActionListener(new ActionListener() {
                            public void actionPerformed(ActionEvent e) {
                            buttonaction(e);
                            }   
                    });
                    button_8.setActionCommand("8");
                numberpanel.add(button_8);

                JButton button_9 = new JButton("9");
                    button_9.addActionListener(new ActionListener() {
                            public void actionPerformed(ActionEvent e) {
                            buttonaction(e);
                            }   
                    });
                    button_9.setActionCommand("9");
                numberpanel.add(button_9);



                Card.add(bodypanel);
                    bodypanel.add(divider, BorderLayout.WEST);
                            divider.add(container, BorderLayout.NORTH);     
                                    container.add(panel_1, "1");
                                    container.add(panel_2, "2");
                                    container.add(panel_3, "3");

                            divider.add(buttonpanel, BorderLayout.SOUTH);
                    bodypanel.add(numberpanel, BorderLayout.EAST);
        }

            private void buttonaction(ActionEvent e){
                try{
                if(cardflag==1)
                    {text_2.append("" + e.getActionCommand());}
                if(cardflag==2)
                    {text_3.append("" + e.getActionCommand());}

                }catch(Exception e1){}
            }

            private void validateText(){
                if(cardflag==2)
                {String text = text_2.getText();
                    if (text.isEmpty()==true)
                    {JOptionPane.showMessageDialog(null, "Text 2 is empty!");
                    cl.show(container, "2");
                    btnNext.setText("Next >");
                    cardflag--;
                    }
                }
            }



    }

有什么办法可以改变下一个和上一个按钮的动作吗?我的代码依赖于cardflag,这是一个检查器是否单击了下一个按钮。那么还有另一种方法可以使下一个和上一个按钮完全相同但不同的方法吗?

1 个答案:

答案 0 :(得分:0)

要查看的代码太多。

如果您只是在从卡片移动到卡片时尝试启用/禁用“下一步”和“上一步”按钮,请查看为您提供此支持的Card Layout Actions