单选按钮动作侦听器中的问题

时间:2017-05-12 23:59:30

标签: java

单击单选按钮中的某个选项时,我编写了一些代码 它应该显示一个jlabel和jtext字段。当单击单选按钮中的其他选项时,它应隐藏先前显示的jlabel和jtext字段并显示新的jlabel和jtext字段。

在输出中,当我点击其中一个单选按钮时,除非我最大化我的窗口,否则它什么都不显示。在设置我的jlabel和jtextfield之后如果我点击其他单选按钮,jlabel和jtextfield被隐藏但我无法看到新的jlabel和jtextfield用于该radiobutton。

awk -F'\t= ' '{split($1,k,"."); 
               k1[k[1]]; k2[k[2]]; k3[k[3]]; 
               v[k[1],k[2],k[3]]=$2}
          END {for(i1 in k1) 
                 for(i2 in k2)
                   for(i3 in k3) 
                     if((i1,i2,i3) in v) 
                       print i1,i2,i3," -> ",v[i1,i2,i3]}' file


personal other dob  ->  05/07/87
personal name first  ->  John
personal name last  ->  Doe
personal contact email  ->  john.doe@idk
personal contact phone  ->  602123456
employment jobs 1  ->  Company One
employment jobs 2  ->  Company Two
employment jobs 3  ->  Company Three

3 个答案:

答案 0 :(得分:1)

添加和删除组件,只需添加全部并隐藏/显示在radiobox选择上,如下所示:

panel_1.add(jlblEmpSal);
panel_1.add(jtxtSal);

panel_1.add(jlblEmpHour);
panel_1.add(jtxtHour_Pay);
panel_1.add(jlblEmpWork);
panel_1.add(jtxtHour_Worked);

ActionListener myAction = new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent e) {

        jlblEmpHour.setVisible(jrdbtnContract.isSelected());
        jtxtHour_Pay.setVisible(jrdbtnContract.isSelected());
        jtxtHour_Worked.setVisible(jrdbtnContract.isSelected());
        jlblEmpWork.setVisible(jrdbtnContract.isSelected());

        jlblEmpSal.setVisible(jrdbuttonFullTime.isSelected());
        jtxtSal.setVisible(jrdbuttonFullTime.isSelected());

    }

};
myAction.actionPerformed(null); // to initialize labels first
    jrdbuttonFullTime.addActionListener(myAction); // add actionlisteners 
    jrdbtnContract.addActionListener(myAction);// add actionlisteners 

正如您所看到的,您甚至不需要2个独立的动作侦听器作为一个,但共享实例就足够了。 所以完整的应用程序将如下所示:

public class Emp4 {

    private JFrame frame;
    private JTextField jtxtName;
    private JTextField jtxtAge;
    private JTextField jtxtSal;
    private JTextField jtxtHour_Pay;
    private JTextField jtxtHour_Worked;

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Emp4 window = new Emp4();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    public Emp4() {
        initialize();
    }

    private void initialize() {
        frame = new JFrame();
        frame.setBounds(0, 0, 1000, 800);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);

        JPanel panel = new JPanel();
        panel.setBorder(new LineBorder(new Color(0, 0, 0), 3));
        panel.setBounds(30, 11, 414, 36);
        frame.getContentPane().add(panel);
        panel.setLayout(null);

        JLabel lblEmployeeDatabase = new JLabel("Employee Database");
        lblEmployeeDatabase.setFont(new Font("Tahoma", Font.PLAIN, 15));
        lblEmployeeDatabase.setBounds(157, 7, 193, 25);
        panel.add(lblEmployeeDatabase);

        JPanel panel_1 = new JPanel();
        panel_1.setBorder(new LineBorder(new Color(0, 0, 0), 3));
        panel_1.setBounds(10, 61, 464, 230);
        frame.getContentPane().add(panel_1);
        panel_1.setLayout(null);

        JLabel jlblEmpName = new JLabel("Employee Name");
        jlblEmpName.setBounds(10, 11, 110, 14);
        panel_1.add(jlblEmpName);

        jtxtName = new JTextField();
        jtxtName.setBounds(114, 8, 120, 20);
        panel_1.add(jtxtName);
        jtxtName.setColumns(10);

        JLabel jlblEmpAge = new JLabel("Employee Age");
        jlblEmpAge.setBounds(10, 52, 110, 14);
        panel_1.add(jlblEmpAge);

        jtxtAge = new JTextField();
        jtxtAge.setColumns(10);
        jtxtAge.setBounds(114, 49, 120, 20);
        panel_1.add(jtxtAge);

        JLabel jlblEmpType = new JLabel("Employee Type");
        jlblEmpType.setBounds(10, 95, 110, 14);
        panel_1.add(jlblEmpType);

        JRadioButton jrdbuttonFullTime = new JRadioButton("Full Time");
        JRadioButton jrdbtnContract = new JRadioButton("Contract ");
        JLabel jlblEmpHour = new JLabel("Hourly Rate");
        jlblEmpHour.setBounds(5, 121, 66, 14);
        ButtonGroup group = new ButtonGroup();
        JLabel jlblEmpSal = new JLabel("Salary");
        jlblEmpSal.setBounds(114, 121, 66, 14);
        JLabel jlblEmpWork = new JLabel("Hours Worked");
        jlblEmpWork.setBounds(150, 120, 86, 24);

        jtxtSal = new JTextField();
        jtxtSal.setColumns(10);
        jtxtSal.setBounds(164, 121, 109, 23);

        jtxtHour_Pay = new JTextField();
        jtxtHour_Pay.setColumns(10);
        jtxtHour_Pay.setBounds(75, 121, 59, 23);

        jtxtHour_Worked = new JTextField();
        jtxtHour_Worked.setColumns(10);
        jtxtHour_Worked.setBounds(243, 121, 109, 23);

        group.add(jrdbuttonFullTime);
        group.add(jrdbtnContract);

        panel_1.add(jlblEmpSal);
        panel_1.add(jtxtSal);

        panel_1.add(jlblEmpHour);
        panel_1.add(jtxtHour_Pay);
        panel_1.add(jlblEmpWork);
        panel_1.add(jtxtHour_Worked);

        ActionListener myAction = new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {

                jlblEmpHour.setVisible(jrdbtnContract.isSelected());
                jtxtHour_Pay.setVisible(jrdbtnContract.isSelected());
                jtxtHour_Worked.setVisible(jrdbtnContract.isSelected());
                jlblEmpWork.setVisible(jrdbtnContract.isSelected());

                jlblEmpSal.setVisible(jrdbuttonFullTime.isSelected());
                jtxtSal.setVisible(jrdbuttonFullTime.isSelected());

            }

        };
        myAction.actionPerformed(null); // to initialize labels first
        jrdbuttonFullTime.addActionListener(myAction);
        jrdbtnContract.addActionListener(myAction);

        jrdbtnContract.setBounds(218, 91, 109, 23);
        jrdbuttonFullTime.setBounds(113, 91, 109, 23);
        panel_1.add(jrdbuttonFullTime);
        panel_1.add(jrdbtnContract);

    }
}

enter image description here enter image description here

答案 1 :(得分:1)

我稍微修改了你的代码。这应该让你走上正确的道路:

public class Emp4 {

    private JFrame frame;
    private JTextField jtxtName;
    private JTextField jtxtAge;
    private JTextField jtxtSal;
    private JTextField jtxtHour_Pay;
    private JTextField jtxtHour_Worked;

    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable() {
            public void run()
            {
                try {
                    Emp4 window = new Emp4();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    public Emp4()
    {
        initialize();
    }

    private void initialize()
    {
        frame = new JFrame();
        frame.setBounds(0, 0, 1000, 800);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);

        JPanel panel = new JPanel();
        panel.setBorder(new LineBorder(new Color(0, 0, 0), 3));
        panel.setBounds(30, 11, 414, 36);
        frame.getContentPane().add(panel);
        panel.setLayout(null);

        JLabel lblEmployeeDatabase = new JLabel("Employee Database");
        lblEmployeeDatabase.setFont(new Font("Tahoma", Font.PLAIN, 15));
        lblEmployeeDatabase.setBounds(157, 7, 193, 25);
        panel.add(lblEmployeeDatabase);

        JPanel panel_1 = new JPanel();
        panel_1.setBorder(new LineBorder(new Color(0, 0, 0), 3));
        panel_1.setBounds(10, 61, 464, 230);
        frame.getContentPane().add(panel_1);
        panel_1.setLayout(null);

        JLabel jlblEmpName = new JLabel("Employee Name");
        jlblEmpName.setBounds(10, 11, 110, 14);
        panel_1.add(jlblEmpName);

        jtxtName = new JTextField();
        jtxtName.setBounds(114, 8, 120, 20);
        panel_1.add(jtxtName);
        jtxtName.setColumns(10);

        JLabel jlblEmpAge = new JLabel("Employee Age");
        jlblEmpAge.setBounds(10, 52, 110, 14);
        panel_1.add(jlblEmpAge);

        jtxtAge = new JTextField();
        jtxtAge.setColumns(10);
        jtxtAge.setBounds(114, 49, 120, 20);
        panel_1.add(jtxtAge);

        JLabel jlblEmpType = new JLabel("Employee Type");
        jlblEmpType.setBounds(10, 95, 110, 14);
        panel_1.add(jlblEmpType);

        JRadioButton jrdbuttonFullTime = new JRadioButton("Full Time");
        JRadioButton jrdbtnContract = new JRadioButton("Contract ");
        JLabel jlblEmpHour = new JLabel("Hourly Rate");
        jlblEmpHour.setBounds(5, 121, 66, 14);
        ButtonGroup group = new ButtonGroup();
        JLabel jlblEmpSal = new JLabel("Salary");
        jlblEmpSal.setBounds(114, 121, 66, 14);
        JLabel jlblEmpWork = new JLabel("Hours Worked");
        jlblEmpWork.setBounds(150, 120, 86, 24);

        jtxtSal = new JTextField();
        jtxtSal.setColumns(10);
        jtxtSal.setBounds(164, 121, 109, 23);

        jtxtHour_Pay = new JTextField();
        jtxtHour_Pay.setColumns(10);
        jtxtHour_Pay.setBounds(75, 121, 59, 23);

        jtxtHour_Worked = new JTextField();
        jtxtHour_Worked.setColumns(10);
        jtxtHour_Worked.setBounds(243, 121, 109, 23);

        //*******************************************************************
        // Add all your salary fields here, not in ActionListeners
        // Start them off invisible
        //*******************************************************************
        jlblEmpSal.setVisible(false);
        panel_1.add(jlblEmpSal);

        jtxtSal.setVisible(false);
        panel_1.add(jtxtSal);

        panel_1.add(jlblEmpHour);
        jlblEmpHour.setVisible(false);

        panel_1.add(jtxtHour_Pay);
        jtxtHour_Pay.setVisible(false);

        panel_1.add(jlblEmpWork);
        jlblEmpWork.setVisible(false);

        jtxtHour_Worked.setVisible(false);
        panel_1.add(jtxtHour_Worked);

        group.add(jrdbuttonFullTime);
        group.add(jrdbtnContract);

        jrdbuttonFullTime.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e)
            {
                if (jrdbuttonFullTime.isSelected()) {
                    //jrdbtnContract.setSelected(false);

                    // ****************************************************
                    // In ActionListeners for radiobuttons, hide the fields you
                    // don't want to see, make visible the ones you do want to see
                    // ****************************************************
                    jlblEmpSal.setVisible(true);
                    jtxtSal.setVisible(true);
                    jlblEmpHour.setVisible(false);
                    jtxtHour_Pay.setVisible(false);
                    jtxtHour_Worked.setVisible(false);
                    jlblEmpWork.setVisible(false);
                }

            }
        });

        jrdbuttonFullTime.setBounds(113, 91, 109, 23);
        panel_1.add(jrdbuttonFullTime);

        jrdbtnContract.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e)
            {
                if (jrdbtnContract.isSelected()) {
                    //jrdbuttonFullTime.setSelected(false);

                    // ****************************************************
                    // In ActionListeners for radiobuttons, hide the fields you
                    // don't want to see, make visible the ones you do want to see
                    // ****************************************************
                    jlblEmpHour.setVisible(true);
                    jtxtHour_Pay.setVisible(true);
                    jlblEmpWork.setVisible(true);
                    jtxtHour_Worked.setVisible(true);
                    jlblEmpSal.setVisible(false);
                    jtxtSal.setVisible(false);
                }

            }
        });
        jrdbtnContract.setBounds(218, 91, 109, 23);
        panel_1.add(jrdbtnContract);

    }
}

您的单选按钮都是未选中的,因此您最初看不到工资明细。单击其中一个时,将显示相应的详细信息。

答案 2 :(得分:0)

在哪种情况下(检查哪个radiobutton?),您想显示哪些控件?