ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 210824_Swing+Checkbox+ActionListener+ItemListener
    Swing 2021. 8. 24. 17:43

    public class SwingCheckEx04 extends JFrame implements ActionListener,ItemListener{

     

    Container cp;

    JCheckBox[] cbHobby=new JCheckBox[4];

    JCheckBox cbDriver,cbBold;

    JButton btnHobby;

     

    JLabel lblResult;

     

     

    public SwingCheckEx04(String title) {

    super(title);

     

    cp=this.getContentPane();

    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    this.setBounds(700,100,400,400); 

    cp.setBackground(new Color(151,190,200));

     

    initDesign();

    this.setVisible(true);

    }

     

     

    //디자인

    public void initDesign() {

     

        this.setLayout(null);

       

        //운전면허

        cbDriver=new JCheckBox("운전면허");

        cbDriver.setBounds(20, 20, 100, 30);

        cbDriver.setOpaque(false);  //불투명 없애기

        this.add(cbDriver);

        cbDriver.addItemListener(this); //운전면허의 이벤트 추가

       

        //굵게

        cbBold=new JCheckBox("라벨 굵게");

        cbBold.setBounds(20, 60, 150, 30);

        cbBold.setOpaque(false);

        this.add(cbBold);

        cbBold.addItemListener(this); //라벨 굵게의 이벤트 추가

       

        //결과라벨

        lblResult=new JLabel("Have a Nice Day",JLabel.CENTER);

        lblResult.setBounds(20, 280, 330, 60);

        lblResult.setBorder(new LineBorder(Color.GRAY,3));  //색깔과 굵기 지정

        this.add(lblResult);

       

        //취미 체크박스

        String []hobby= {"서핑","운동","영화","여행"};

        int xpos=20;  //xpos의 초기값

       

        for(int i=0;i<cbHobby.length;i++)

        {

        cbHobby[i]=new JCheckBox(hobby[i]); //생성해주기

        cbHobby[i].setBounds(xpos, 100, 80, 30);

        cbHobby[i].setOpaque(false);

        this.add(cbHobby[i]);

        xpos+=80;

        }

       

        //버튼

        btnHobby=new JButton("당신의 취미는");

        btnHobby.setBounds(80, 150, 200, 30);

        this.add(btnHobby);

        //버튼의 이벤트 추가

        btnHobby.addActionListener(this);

    }

     

     

    public static void main(String[] args) {

              new SwingCheckEx04("체크박스출력연습");

    }

              

     

    //아이템리스너:주로 체크박스 선택했을 때 바로 되는 것

    @Override

    public void itemStateChanged(ItemEvent e) {

     

    Object ob=e.getSource();

    if(ob==cbDriver)

    {

    String s="체크상태: "+cbDriver.isSelected()+", 텍스트: "+cbDriver.getText();

    lblResult.setText(s);

    }

     

    //폰트 굵게 bold

    else if(ob==cbBold)  

    {

    if(cbBold.isSelected())

    lblResult.setFont(new Font("",Font.BOLD,20));   //""은 기본을 의미

    else 

    lblResult.setFont(new Font("",Font.PLAIN,12));

    }

    }

     

    //다중체크 선택하고 버튼클릭이벤트

    @Override

    public void actionPerformed(ActionEvent e) {

     

    Object ob=e.getSource();

    if(ob==btnHobby)  //익명내부클래스로 해도 됨(객체가 명확할 때)

    {

    int select=0;

    String s="저의 취미는 ";

     

    // for(int i=0;i<cbHobby.length;i++)

    // {

    // if(cbHobby[i].isSelected()==true)

    // {

    // select++;

    // s+="["+cbHobby[i].getText()+"]";  //cbHobby에서 가지고 온 값

    // }

    // }

     

    //for문 대신 for~each도 가능

    for(JCheckBox cb:cbHobby)

    {

    if(cb.isSelected())

    {

    select++;

    s+="["+cb.getText()+"]";

    }

    }

    if(select==0)

    s="저는 취미가 없습니다";

    else 

    s+="입니다";

     

    //라벨출력

    lblResult.setText(s);

    }

    }

    }

     

     

    취미를 선택하고 하단의 버튼을 누르면 출력됨

     

    댓글

Designed by Tistory.