-
자바 UI swing / 버튼 추가 해보기 JFrame프로그래밍/JAVA 자바 2021. 9. 7.반응형
package swingEx; import java.awt.BorderLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; public class Ex001 extends JFrame { private static final long serialVersionUID = 1L; private JButton btn1, btn2, btn3, btn4; private JLabel lbl; public Ex001() { // x 버튼으로 프로그램을 종료 가능하도록 설정 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 기본적으로 JFrame는 BorderLayout을 적용하여 화면에 컴포넌트를 동,서,남,북,중앙 5개를 부착할 수 있다. btn1 = new JButton("버튼 1"); add(btn1, BorderLayout.SOUTH); btn2 = new JButton("버튼 2"); add(btn2, BorderLayout.NORTH); btn3 = new JButton("버튼 3"); add(btn3, BorderLayout.WEST); btn4 = new JButton("버튼 4"); add(btn4, BorderLayout.EAST); lbl = new JLabel("환영합니다.", JLabel.CENTER); add(lbl, BorderLayout.CENTER); setTitle("스윙 프로그래밍"); setSize(500, 500); setVisible(true); } public static void main(String[] args) { new Ex001(); } }
- JFrame을 이용해서 버튼을 추가 할 수 있다.
- setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); = 우측 상단 X 모양 버튼으로 프로그램 종료
- 기본적으로 JFrame에서는 BorderLayout에 null을 주지 않는 이상은 동서남북,중앙 5개 위치만 설치 가능
- 동서남북에는 버튼놓고 가운데에는 라벨을 놓은 모습
- 그리고 타이틀, 사이즈 정해주고 Visible을 true로 해줘야 보인다.
텍스트 입력 해보기
package swingEx; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; public class Ex002 extends JFrame implements ActionListener { private static final long serialVersionUID = 1L; private JTextArea ta; private JTextField tf; private JButton btn1, btn2; public Ex002() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ta = new JTextArea(); // 여러줄을 입력 할수 있는 컴포넌트 JScrollPane sp = new JScrollPane(ta); // 컴포넌트에 스크롤바 추가 add(sp, BorderLayout.CENTER); // JPanel은 컴포넌트를 묶을때 사용 // JPanel의 기본 레이아웃은 FlowLayout로 일직선으로 배치 JPanel p = new JPanel(); tf = new JTextField(25); p.add(tf); btn1 = new JButton("추가"); btn1.addActionListener(this); // 버튼에 ActionEvent 등록 p.add(btn1); btn2 = new JButton("종료"); btn2.addActionListener(this); p.add(btn2); add(p, BorderLayout.SOUTH); setTitle("스윙 예제 프로그램"); setSize(500, 500); setVisible(true); } public static void main(String[] args) { new Ex002(); } @Override public void actionPerformed(ActionEvent e) { // ActionEvent가 발생하면 호출되는 메소드 // ActionEvent는 버튼, 메뉴아이템, JTextField에서 엔터를 눌를때 등에서 발생 if( e.getSource() == btn1 ) { String s = tf.getText().trim(); if(s.length() == 0) { return; } ta.setText(ta.getText()+s+"\n"); tf.setText(""); tf.requestFocus(); } else if( e.getSource() == btn2 ) { int result = JOptionPane.showConfirmDialog(this, "프로그램 종료할래 ?", "확인", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); if(result == JOptionPane.YES_OPTION) { System.exit(0); } } } }
- 버튼에 기능을 주기 위해서는 ActionListener를 사용해야 한다.
- 클래스가 이미 JFrame을 상속 받았으니까 ActionListener는 인터페이스로 참조 해와야 같이 사용 할 수 있다.
- JTextArea() = 텍스트 입력 창
- JScrollPane을 추가 해줘야 스크롤바가 생긴다.
- JTextField(25) = 텍스트창 위치 가로 길이 (0으로하면 거의 안보임)
- actionPerformed 함수는 이제 버튼들에 기능을 설정해주기 위해 만듬
package swingEx; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTextField; import javax.swing.JTextPane; public class Ex003 extends JFrame implements ActionListener { private static final long serialVersionUID = 1L; private JTextField []tf = new JTextField[6]; private JTextPane tp = new JTextPane(); private JButton btn1, btn2; public Ex003() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(null); // 컴포넌트를 수동으로 배치 String[] title = {"학번 : ", "이름 : ", "생년월일 : ", "국어 : ", "영어 : ", "수학 : "}; for(int i=0; i<tf.length; i++) { JLabel lbl = new JLabel(title[i], JLabel.RIGHT); lbl.setText(title[i]); lbl.setBounds(10, (i+1)*30, 80, 20); // 컴포넌트 배치, (x, y, width, height) add(lbl); tf[i] = new JTextField(); tf[i].setBounds(100, (i+1)*30, 100, 20); add(tf[i]); } btn1 = new JButton("확인"); btn1.addActionListener(this); btn1.setBounds(30,210,60,20); add(btn1); btn2 = new JButton("종료"); btn2.addActionListener(this); btn2.setBounds(100,210,60,20); add(btn2); tp.setEditable(false); tp.setBounds(210,30,180,170); add(tp); setTitle("성적처리"); setSize(430, 300); setVisible(true); } public static void main(String[] args) { new Ex003(); } @Override public void actionPerformed(ActionEvent e) { if(e.getSource() == btn1) { try { String hak = tf[0].getText(); String name = tf[1].getText(); String birth = tf[2].getText(); int k = Integer.parseInt(tf[3].getText()); int eng = Integer.parseInt(tf[4].getText()); int m = Integer.parseInt(tf[5].getText()); int t = k+eng+m; String s = "학번:"+hak+"\n이름:"+name+"\n생년월일:"+birth+"\n총점:"+t; tp.setText(s); } catch (Exception e2) { } } else if(e.getSource()==btn2) { System.exit(0); } } }
- 위에 내용들을 응용해서 만듬 + 레이아웃을 조정해서 컴포넌트(버튼이나 영역들)들을 수동으로 배치했음
- 배열과 반복문을 이용해서 항목들 추가 x 위치는 같고 y위치만 다르니까
- 마찬가지로 텍스트 입력창도 같이 세팅
- 그리고 확인과 종료 버튼 겉모습만 세팅
- ActionEvent을 이용해서 버튼과 텍스트 입력창에 기능을 준다.
반응형'프로그래밍 > JAVA 자바' 카테고리의 다른 글
자바 네트워크(3) / 숫자 야구 게임 (0) 2021.09.09 자바 네트워크(1) URL, 소켓 ,TCP/IP (0) 2021.09.07 스레드(3) Timer 클래스 / wait (0) 2021.09.07 Thread 스레드 (2) / synchronized (0) 2021.09.06 프로세스, 쓰레드 Thread (0) 2021.09.05