Web develop/JAVA

[JAVA] 자바 Swing Event 사용 및 예제

ForA 2019. 5. 2. 10:37
728x90
  • 순수 자바언어로 구성
  • 운영체제에 상관없이 동일한 컴포넌트 지원
  • javax.swing.*; // x:extension(확장)
  • AWT와 비교하여 첫글자가 'J'로 시작

MouseEvent

Mouse의 움직임 -> 이벤트. 여러 컴포넌트에 공통적으로 적용할 수 있는 이벤트

public class MouseEventTest extends JFrame implements MouseListener{}

@Override
    public void mouseClicked(MouseEvent e) {
    //컴포넌트를 클릭했을때 실행 
    }

    @Override
    public void mousePressed(MouseEvent e) {
    //컴포넌트를 눌렀을때 실행
    }

    @Override
    public void mouseReleased(MouseEvent e) {
    //컴포넌트를 클릭하지않고 떼어냈을때 실행
    }

    @Override
    public void mouseEntered(MouseEvent e) {
    //컴포넌트 위에 커서를 올렸을때 실행
    }

    @Override
    public void mouseExited(MouseEvent e) {
    //커서가 컴포넌트 위에서 나갔을 때 실행 
    }

NullLayout

: 컨테이너에 부착되는 컴포넌트는 위치(x,y)와 사이즈(가로,세로) 설정

setLayout(null);
bt.setBounds(80,50,100,100);

//bt.setBounds(int x,int y,int width, int height);
//bt.setLocation(int x,int y);
//bt.setSize(int width, int height); ==> location, size 합쳐서 bounds


그 외 사용 문법

Swing의 String문자열 안에 HTML 태그 사용

bt = new JButton("<html><font size=20 color=red face=궁서체>버어어튼</font></html>");

x버튼 클릭시 프로그램 종료

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

폼을 닫았을 때 메인뷰로 이동(windowClosing 사용)

private void eventUp(){

form.addWindowListener(new WindowAdapter() {
    @Override
    public void windowClosing(WindowEvent e){
        form.setVisible(false);
        mainView.setVisible(true);
    }
}
}

ImageIcon 클래스를 사용해서 이미지 삽입하기

ImageIcon icon = new ImageIcon("image/leftRollover.gif"); //경로는 대소문자구분 x

//JCheckBox(String text, Icon icon);
cb1 = new JCheckBox("첫번째체크박스",icon);
    cb1.setRolloverIcon(icon);//체크박스 위에 마우스가 놓여졌을 때 
    cb1.setSelectedIcon(icon2);//체크박스가 선택되었을때

패널 타이틀과 패널에 음영주기

panel.setBorder(new TitledBorder("패널타이틀"));
panel.setBorder(new BevelBorder(BevelBorder.RAISED));//양각
panel.setBorder(new BevelBorder(BevelBorder.LOWERED));//음각

Swing ItemMoveTest 예제

public class ItemMoveTest extends JFrame implements ActionListener{

  JList<String> left_list, right_list;
  JTextField left_tf, right_tf;
  JButton bt_right,bt_right_all,bt_left,bt_left_all;

  JPanel leftp, centerp, rightp;
  JScrollPane left_scrol, right_scrol; 
//JFrame에서는 스크롤이 지원안되기에 JScrollPane으로 따로 지정을 해주어야 함.보통 JList, JTextArea, JTable과 함께 쓴다.

  Vector<String> leftV;
  Vector<String> rightV;

  public ItemMoveTest() {

      // ======list의 Vector 데이터 지정=====
      leftV = new Vector<String>();
      rightV = new Vector<String>();

      left_list = new JList<String>();
      left_scrol = new JScrollPane(left_list);

      right_list = new JList<String>();
      right_scrol = new JScrollPane(right_list);

      //===== Component 선언======
      left_tf = new JTextField();
      right_tf = new JTextField();

      bt_right = new JButton("▷");
      bt_right_all = new JButton("▶");
      bt_left = new JButton("◁");
      bt_left_all = new JButton("◀");

      //===== Panel =====
      leftp = new JPanel();
          leftp.setLayout(new BorderLayout());
          leftp.add("Center",left_scrol);//스크롤바가 있는 JList붙이기
          leftp.add("South",left_tf);        

      rightp = new JPanel();
          rightp.setLayout(new BorderLayout());
          rightp.add("Center",right_scrol);
          rightp.add("South",right_tf);        

      centerp = new JPanel();
          centerp.setBackground(Color.YELLOW);
          centerp.setLayout(new GridLayout(6,3,10,10));
          centerp.add(new JLabel());centerp.add(new JLabel());centerp.add(new JLabel());
          centerp.add(new JLabel());centerp.add(bt_right);     centerp.add(new JLabel());
          centerp.add(new JLabel());centerp.add(bt_right_all); centerp.add(new JLabel());
          centerp.add(new JLabel());centerp.add(bt_left);    centerp.add(new JLabel());
          centerp.add(new JLabel());centerp.add(bt_left_all);centerp.add(new JLabel());
          // JLabel의 공백을 이용하여 위치를 지정한 것이지만 비효율적. 나중에 Null레이아웃을 사용

      //=====SET ======
      setTitle("Item움직이기");
      setLayout(new GridLayout(1,3));
      add(leftp);
      add(centerp);
      add(rightp);

      setSize(600, 300);
      setVisible(true);
      setDefaultCloseOperation(EXIT_ON_CLOSE);

      eventUp();
  }//생성자

  private void eventUp() { //이벤트 소스 등록
    // ====BUTTON ====
        bt_left.addActionListener(this);//bt_left에 액션을 감지하다가 핸들러 호출.
        bt_left_all.addActionListener(this);
        bt_right.addActionListener(this);
        bt_right_all.addActionListener(this);

    //텍스트필드
        left_tf.addActionListener(this);
        right_tf.addActionListener(this);            
  }//eventup

  @Override
  public void actionPerformed(ActionEvent e) {//핸들러
      //액션: 버튼누르기, 텍스트필드에 enter입력

      Object ob = e.getSource(); 
      //이벤트 발생시킨 이벤트소스의 주소 얻기

      if(ob==left_tf) {
          String str = left_tf.getText();

          if(str.trim().contentEquals("")) { //str이 공백이라면
              left_tf.setText("");
              return;
          }

          leftV.add(str);//벡터에 담고
          left_list.setListData(leftV);// 벡터데이터를 JList에 반영
          left_tf.setText("");//원본 삭제

      }else if(ob == right_tf) {
          String str = right_tf.getText();

          if(str.trim().length()<1) {
              right_tf.setText("");
              return;
          }
          rightV.add(str);
          right_list.setListData(rightV);

          right_tf.setText("");
      }
      if (ob == bt_right) {
          String str = left_list.getSelectedValue();

          if(str == null) {
              JOptionPane.showMessageDialog(this, "이동할 아이템 선택");
              return;
          }

          rightV.add(str);
          right_list.setListData(rightV);

          leftV.remove(str);
          left_list.setListData(leftV);

      }else if (ob == bt_right_all) {
          for(int i = 0; i<leftV.size();i++) {
              rightV.add(leftV.get(i));
          }

          leftV.clear();
          //leftV.removeAll();

          //각 리스트에 변경된 벡터내용 추가
          left_list.setListData(leftV);
          right_list.setListData(rightV);
      }else if(ob == bt_left) {
          String str = right_list.getSelectedValue();
          if(str == null) {
              JOptionPane.showMessageDialog(this, "이동할 아이템 선택");
              return;
          }

          leftV.add(str);
          left_list.setListData(leftV);

          rightV.remove(str);
          right_list.setListData(rightV);

      }else if(ob == bt_left_all) {
          for(int i = 0; i<rightV.size();i++) {
              leftV.add(rightV.get(i));
          }

          rightV.clear();

          right_list.setListData(rightV);
          left_list.setListData(leftV);
      }
  }//Action

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