2017-05-12 4 views
1

Ich habe etwas Code geschrieben, wenn eine der Optionen im Radio Button angeklickt es sollte ein jlabel und jtext Feld anzeigen. Und wenn eine andere Option in der Optionsschaltfläche angeklickt wird, sollte sie das zuvor gezeigte jlabel- und jtext-Feld ausblenden und ein neues jlabel- und jtext-Feld anzeigen.Problem in Radio Button Aktion Listener

In der Ausgabe, wenn ich auf einen der Radio-Button klicke, wird nichts angezeigt, außer und bis ich mein Fenster maximiere. Nachdem ich mein jlabel und jtextfield getippt habe Wenn ich auf einen anderen Radioknopf klicke, ist das jlabel und das jtextfield ausgeblendet, aber ich kann kein neues jlabel und jtextfield für diesen Radiobutton sehen.

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






     } 
    } 
+0

Danke !!! Ich habe verstanden, wie es funktioniert –

Antwort

0

In welchem ​​Fall (welcher Radiobutton aktiviert?) Möchten Sie welche Steuerelemente anzeigen?

1

Insteed Hinzufügen und Entfernen von Komponenten, fügen Sie einfach alle und verstecken/zeigen sie auf Radiobox Auswahl wie folgt aus:

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 

Wie Sie sehen können, Sie nicht sogar brauchen, 2 separate Aktion Hörer als eine, sondern geteilt Instanz ist gerade genug. So ist die komplette App wird wie folgt aussehen:

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

+0

Vielen Dank für Ihre Zeit. Jetzt habe ich erfahren, wie es wirklich funktioniert –

1

Ich habe Ihren Code ein wenig überarbeitet. Dies sollte man auf dem richtigen Weg gehen:

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

    } 
} 

Optionsfelder beginnen beide nicht markiert, so dass Sie sehen zunächst kein Gehalt Detail. Wenn Sie auf das eine oder das andere klicken, werden die entsprechenden Details angezeigt.

+0

Danke !!! Jetzt habe ich verstanden, wie das funktioniert –