2011. 7. 17. 12:10

자바 스윙(Java Swing) 컴포넌트의 ItemChange 이벤트 처리하기

보통은 버튼에 addActionListener() 이벤트 핸들러들 달고, 그것을 actionPerformed() 메써드로 이벤트 처리를 하는게 일반적이다. 그 외 라디오버튼이나 체크박스 등의 컴포넌트의 특정 항목의 변화를 감지해 처리하는 ItemEvent 클래스에서 ItemStateChange() 메써드로 이벤트를 처리하려면 addItemListener() 핸들러를 붙여야 한다.

import java.awt.*  ;
import javax.swing.* ;
import java.awt.event.* ;

public class ItemChangeEvent3 extends JFrame implements ItemListener {
    JPanel mainPanel ;
    JTextArea textArea = null ;
    JScrollPane scrollPane = null ;

    JPanel panelGender, panelMemberGrade, panelHobbies ;
    JLabel labelGender, labelMemberGrade, labelHobbies ;    
    JRadioButton rbMale, rbFemale, rbPremiumMember, rbNormalMember ;
    JCheckBox cbClimbing, cbWindSurfing, cbFishing, cbReading ;

    public ItemChangeEvent3() {
        mainPanel = new JPanel() ;

        panelGender = new JPanel() ;
        panelMemberGrade = new JPanel() ;
        panelHobbies = new JPanel() ;

        // 성별 구분 라디오버튼과 이벤트 핸들러 추가
        labelGender = new JLabel("성별 구분 : ") ;
        rbMale = new JRadioButton( "남   자"true ) ;
        rbFemale = new JRadioButton( "여   자"false ) ;

        ButtonGroup btnGroupGender = new ButtonGroup() ;
        btnGroupGender.add( rbMale ) ;
        btnGroupGender.add( rbFemale ) ;

        panelGender.add( labelGender ) ;

        panelGender.add( rbMale ) ;
        panelGender.add( rbFemale ) ;

        rbMale.addItemListener( this ) ;        
        rbFemale.addItemListener( this ) ;        

        // 회원 구분 라디오버튼과 이벤트 핸들러 추가
        labelMemberGrade = new JLabel("회원 구분 : ") ;
        rbPremiumMember = new JRadioButton( "우수 회원"true ) ;
        rbNormalMember = new JRadioButton( "일반 회원"false ) ;

        ButtonGroup btnGroupMemberGrade = new ButtonGroup() ;
        btnGroupMemberGrade.add( rbPremiumMember ) ;
        btnGroupMemberGrade.add( rbNormalMember ) ;

        panelMemberGrade.add( labelMemberGrade ) ;

        panelMemberGrade.add( rbPremiumMember ) ;
        panelMemberGrade.add( rbNormalMember ) ;

        rbPremiumMember.addItemListener( this ) ;
        rbNormalMember.addItemListener( this ) ;    

        // 취미 선택 체크박스와 이벤트 핸들러 추가
        labelHobbies = new JLabel("취미 선택 : ") ;
        cbClimbing = new JCheckBox("등  산") ;
        cbWindSurfing = new JCheckBox("윈드 서~핑") ;
        cbFishing = new JCheckBox("낚  시") ;
        cbReading = new JCheckBox("독  서") ;
        
        panelHobbies.add( labelHobbies ) ;

        panelHobbies.add( cbClimbing ) ;            
        panelHobbies.add( cbWindSurfing ) ;                
        panelHobbies.add( cbFishing ) ;                
        panelHobbies.add( cbReading ) ;
            
        cbClimbing.addItemListener( this ) ;    
        cbWindSurfing.addItemListener( this ) ;
        cbFishing.addItemListener( this ) ;
        cbReading.addItemListener( this ) ;

        mainPanel.setLayout(new BorderLayout()) ;
        
        mainPanel.add( panelGender, BorderLayout.NORTH ) ;
        mainPanel.add( panelMemberGrade, BorderLayout.CENTER ) ;
        mainPanel.add( panelHobbies, BorderLayout.SOUTH ) ;
        
        add( mainPanel, BorderLayout.NORTH ) ;

        scrollPane = new JScrollPane( textArea = new JTextArea() ) ;
        add( scrollPane, BorderLayout.CENTER ) ;        
        
        setBounds( 200200600450 ) ;
        setVisible( true ) ;

        setDefaultCloseOperation( EXIT_ON_CLOSE ) ;
    } // constructor

    public static void main(String[] args)    {
        new ItemChangeEvent3() ;
    }

    // ItemChange 이벤트 처리 메써드
    public void itemStateChanged( ItemEvent e ) {
        String item = ( ( AbstractButton )e.getItem() ).getText() ;

        if ( e.getStateChange() == ItemEvent.SELECTED ) {
            textArea.append( item + " 선택\n" ) ;
        }

        else {
            textArea.append( item + " 선택 해제\n" ) ;
        }
    } // itemStateChanged()

// class