java - 单选按钮操作监听器中的问题

标签 java

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

在输出中,当我单击其中一个单选按钮时,除非最大化窗口,否则它不会显示任何内容。获取我的 jlabel 和 jtextfield 后,如果我单击其他单选按钮,jlabel 和 jtextfield 将被隐藏,但我无法看到该单选按钮的新 jlabel 和 jtextfield。

enter code here


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);

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

                panel_1.add(jlblEmpSal);
                panel_1.add(jtxtSal);
                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);

                panel_1.add(jlblEmpHour);
                panel_1.add(jtxtHour_Pay);
                panel_1.add(jlblEmpWork);
                panel_1.add(jtxtHour_Worked);
                jlblEmpSal.setVisible(false);
                jtxtSal.setVisible(false);
            }


        }
    });
    jrdbtnContract.setBounds(218, 91, 109, 23);
    panel_1.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); // 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

关于java - 单选按钮操作监听器中的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43947925/

相关文章:

java - 从数据库导入的字符串有引号("),想再次使用字符串查询数据库

java - 当指定一周的第一天时,查找特定日期的星期几

java - ORA-00904 : "BOOKORDERS": invalid identifier in Hibernate

java - Hibernate org.hibernate.hql.ast.QuerySyntaxException 错误

Java LibGDX 删除项目符号问题

java - Optaplanner - benchmarkConfigResource 不作为类路径资源存在于类加载器中

java - 如何在数组中调用我存储的数据(字符串)?

java - 即使我有正确的 jar,也会出现 ClassNotFoundException

java - 如何安装和导入 Java "HttpClient"库

java - Maven CXF 插件 API 不兼容