Swing

210824_Swing+Checkbox+ActionListener+ItemListener

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

}

}

}

 

 

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