点击不同班级的按钮切换tJabbedpane的标签?

时间:2016-01-16 14:42:03

标签: java swing jpanel jtabbedpane

enter image description here

在A类中,当我单击一个按钮并且该按钮返回true或false时。如果返回true,则启用JTabbedPane的Next选项卡,该选项卡写在另一个类中。这可能听起来很愚蠢,但我已经尝试了很多。它不断给出空指针异常。这是我的代码..

public class StepsForApply extends JPanel {

    public JTabbedPane tab = new JTabbedPane();
    PersonalDetails pd = new PersonalDetails();
    int ch =1;
    int a[]={0,1,2,3,4,5};
    public StepsForApply()
    {
        setLayout(null);
        setBounds(100, 100, 660, 300);
        tab.add("Sourcing",new  JPanel());
        tab.add("Personal Details",pd);
        tab.add("Income Details",new JPanel());
        tab.add("Education Details", new JPanel());
        tab.add("Liability Details",new JPanel());
        tab.add("Experence Details", new JPanel());
        tab.setBounds(0,0,700,300);
        add(tab);
        //disableAll(1);
        for(int i=2;i<=a.length-1;i++)
        {
        tab.setEnabledAt(i, false);
        }


        if(pd.check()==true)
        {
            tab.setEnabledAt(2,true);
        }
        setVisible(true);

    }
}

以下是选项卡中的访问个人详细信息

public class PersonalDetails extends JPanel { 
    int response,response1;
    int cooat;
    private JTextField voterTxt;
    public boolean checkstatus = false;
    public PersonalDetails()
    {
        setLayout(null);
        JButton btnSave = new JButton("Save");
        btnSave.setBounds(29, 173, 89, 23);
        add(btnSave);

        voterTxt = new JTextField();
        voterTxt.setBounds(137, 67, 86, 20);
        add(voterTxt);
        voterTxt.setColumns(10);

        JLabel lblVoteridNo = new JLabel("VoterId No.");
        lblVoteridNo.setBounds(29, 70, 94, 14);
        add(lblVoteridNo);
        btnSave.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
            cooat = JOptionPane.showConfirmDialog(null, "Do you want to continue?", "Confirm",

                        JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
                       PersonalDetails.this.check();

            }
        });


    }
        '
        public boolean check()
        {
            if (cooat == JOptionPane.NO_OPTION) {
                 voterTxt.requestFocus();
                }
            else
                 if(cooat==JOptionPane.YES_OPTION)
                {
                     checkstatus = true;
                    return checkstatus;
                }

          return checkstatus;
        }   
}   

1 个答案:

答案 0 :(得分:1)

您的代码存在很多重大问题,包括:

  • 在用户有机会与程序交互并可能更改其状态之前,您在GUI创建时测试了cooat的值。所以当你测试时,cooat将== 0(这是JOptionPane.YES_OPTION的值)。
  • 你假设一个按钮的动作执行方法可以返回一些东西 - 但它不能,因为它是一个void方法。
  • 一个小问题,但我发现你正在使用空布局和setBounds(..)。虽然null布局和setBounds()似乎是Swing新手,比如创建复杂GUI的最简单和最好的方法,但是你创建的Swing GUI越多,你在使用它们时会遇到更严重的困难。 。当GUI调整大小时,他们不会调整组件的大小,他们是增强或维护的皇室女巫,当他们放置在滚动窗格中时,他们完全失败,当他们在所有平台或屏幕分辨率不同时看起来很糟糕原来的。
  • 您已经在某处抛出了NullPointerException并正在寻求帮助,但是没有给我们足够的信息以便我们帮助您。如果你已经对解决NullPointerException(NPE)进行了一些搜索,那么你就会知道我们需要的最重要的信息是异常相关的堆栈跟踪和一些确切的识别。导致它的行,堆栈跟踪将告诉你的东西。请发布此信息,以便我们为您提供帮助。