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();
}
}
'Web develop > JAVA' 카테고리의 다른 글
[JAVA] 자바 MVC 패턴 (Model, View, Controller) (1) | 2019.05.03 |
---|---|
[JAVA] 자바Swing 숫자야구게임 예제 (2) | 2019.05.02 |
[JAVA] 자바 Swing JTable, DefaultTableModel (0) | 2019.04.30 |
[JAVA] 자바 GUI Event 처리 방법 (0) | 2019.04.30 |
[JAVA] 자바 GUI (0) | 2019.04.29 |