-
자바 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();}@Overridepublic 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();}@Overridepublic 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