Fairy ' s

[JFrame] JFrame 이란? / 기초 예제 구현 본문

Study/JAVA

[JFrame] JFrame 이란? / 기초 예제 구현

berafairy 2023. 1. 9. 10:33

예제에 대한 설명은 기존 코드를 작성해주신 선생님께서 대부분 주석으로 표기해 두었지만,

개인적으로 모르는 부분들을 따로 정리해두었습니다.

 // 참고


 

JFrame 이란?

  • Java Swing 클래스의 일부이며, 구현되는 하나의 창이다.
  • Swing은 자바에서 그래픽 사용자 인터페이스를 구현하기 위해 제공되는 클래스이다.
  • 버튼, 창, 표, 트리 등의 컴포넌트들을 이용할 수 있다.

 

 


예제 1 // 참고

// 메인 UI의 TextField에 내용을 입력하고 전송 버튼을 누를 시 새로운 팝업 화면에 그 메시지 내용이 노출

// 메인 UI의 삭제 버튼을 누를 시 TextField에 빈 문자열을 넣어주어 내용을 삭제시킴

// import 생략

public class ExSwing extends JFrame implements ActionListener {

	// TextField 정의하기
	private JTextField inputMsg;
	
	// 생성자
	public ExSwing() {
		setSize(800, 500);
		setLocation(100, 100);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		//FlowLayout 객체 전달하기
		setLayout(new FlowLayout());
		      
		// 문자열을 입력할수 있는 UI 
		inputMsg=new JTextField(10);
		      
		// 전송버튼
		JButton sendBtn=new JButton("전송");
		sendBtn.setActionCommand("send");
		sendBtn.addActionListener(this);
		add(sendBtn);
		      
		// 삭제버튼
		JButton deleteBtn = new JButton("삭제");
		deleteBtn.setActionCommand("delete");
		deleteBtn.addActionListener(this);
		
		// 패널 객체를 생성해서
		JPanel panel = new JPanel();
        
		// 패널에 UI를 추가하고
		panel.add(inputMsg);
		panel.add(sendBtn);
		panel.add(deleteBtn);
		//패널 통채로 프레임에 추가하기
		add(panel);
		      
		setVisible(true);
	}
    public static void main(String[] args) {
            new ExSwing();
    }

    @Override
    public void actionPerformed(ActionEvent e) {
    
        // 이벤트가 발생한 버튼에 설정된 action command 읽어오기 
        String command=e.getActionCommand();
        if(command.equals("send")) {
            // JTextField에 입력한 문자열 읽어오기
            String msg = inputMsg.getText();
            JOptionPane.showMessageDialog(this, msg);
        }else if (command.equals("delete")) {
            // 빈 문자열을 넣어주어서 삭제하기
            inputMsg.setText("");
        }
    }
}
  • 버튼 기능 구현
    ActionListener 인터페이스 implements / setActionCommand 지정 / actionPerformance에서 command에 따라 기능 구현

  • setDefaultCloseOperation(EXIT_ON_CLOSE) : 기존에 존재하는 닫기 표시를 누르면 창이 닫히는 것으로 보이지만
    아직 프로세스가 가동중이고, 이를 남겨두면 메모리를 많이 차지하게 된다. 이 메서드를 사용하면 윈도우창 종료 시
    프로세스까지 깔끔하게 닫을 수 있다.
  • FlowLayout : 배치 관리자

배치 관리자 종류

  • FlowLayout : 왼쪽에서 오른쪽으로 배치, 오른쪽 공간이 없으면 아래로 자동 배치
    ex ) // FlowLayout(FlowLayout.LEFT, 10, 20); // 왼쪽 정렬, 좌우간격 10, 상하간격 20
  • BorderLayout : 동, 서, 남, 북, 중앙 5개의 영역으로 나눠준다.
    ex ) BorderLayout(30, 20); // 좌우 30, 상하 20
  • GridLayout : 2차원 그리드로서 n x n 으로 설정해주며 왼쪽에서 오른쪽, 위에서 아래 순으로 배치
    ex ) // GridLayout(4, 3, 5, 50); // 4 x 3 그리드에서 좌우간격 5, 상하간격 5
  • CardLayout : 컴포넌트를 포개어 배치
  • Null : 레이아웃을 쓰지 않고 각  컴포넌트마다 수동으로 위치 설정을 해 줄 때마다 사용한다.

 

 


예제 2

// TextField에 내용을 입력하고 추가 버튼을 누르면 JList에 추가됨 (엔터키를 눌러도 추가)

// 삭제하고 싶은 내용을 선택 후 삭제를 누르면 삭제시킴

// import 생략

public class ExSwing extends JFrame implements ActionListener, KeyListener{
   // 필요한 필드 정의하기 
   private JTextField inputName;
   private DefaultListModel<String> model;
   private JList jList;
   
   // 생성자
   public ExSwing() {
      setSize(800, 500);
      setLocation(100, 100);
      setDefaultCloseOperation(EXIT_ON_CLOSE);
      // BorderLayout 객체 전달하기
      setLayout(new BorderLayout());
      
      // 페널에 추가할 UI 를 미리 만든다.
      JLabel label=new JLabel("추가할 이름입력");
      inputName=new JTextField(10);
      JButton addBtn=new JButton("추가");
      addBtn.setActionCommand("add");
      addBtn.addActionListener(this);
      // 삭제 버튼 
      JButton deleteBtn=new JButton("삭제");
      deleteBtn.setActionCommand("delete");
      deleteBtn.addActionListener(this);
      
      
      // 패널에 UI 를 추가하고 
      JPanel topPanel=new JPanel();
      topPanel.add(label);
      topPanel.add(inputName);
      topPanel.add(addBtn);
      topPanel.add(deleteBtn);
      
      // 패널째로 프레임의 상단에 추가하기
      add(topPanel, BorderLayout.NORTH);
      
      // 목록을 출력할 UI 
      jList=new JList<>();
      //JList 에 출력할 데이터를 가지고 있는 모델 객체 
      model=new DefaultListModel<>();
      model.addElement("안녕하세요");
      model.addElement("자바");
      model.addElement("어려워요");
      //모델을 JList 에 연결하기 
      jList.setModel(model);
      
      // 스크롤 페널에 JList 넣어주기
      JScrollPane sc=new JScrollPane(jList,
            JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
            JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
      
      // 프레임에 스크롤 페널 추가하기 
      add(sc, BorderLayout.CENTER);
      
      // JTextField 에 키 리스너 등록하기 
      inputName.addKeyListener(this);
      
      setVisible(true);
   }
   
   // run 했을때 실행순서가 시작되는 main 메소드 
   public static void main(String[] args) {
      new ExSwing();
   }
   
   // ActionListener 인터페이스를 구현해서 강제로 Override 한 메소드 
   @Override
   public void actionPerformed(ActionEvent e) {
      //이벤트가 발생한 버튼에 설정된 action command 읽어오기 
      String command=e.getActionCommand();
      if(command.equals("add")) {
         //JTextField 에 입력한 문자열을 읽어와서 DefaultListModel 객체에 추가해야 한다. 
         String name=inputName.getText();
         model.addElement(name);
         inputName.setText("");
      }else if(command.equals("delete")) {
         //JList 의 메소드를 이용해서 선택된 행을 알아낸다.
         int index=jList.getSelectedIndex();
         //만일 선택된 인덱스가 있다면 
         if(index >= 0) {
            //모델에서 해당 인덱스를 삭제한다. 
            model.remove(index);
         }
         
      }
   }

   @ Override
   public void keyPressed(KeyEvent e) {
      //눌러진 키의 코드값을 읽어와서 
      int code=e.getKeyCode();
      
      // 엔터키의 코드값인지 확인한다. 
      if(code == KeyEvent.VK_ENTER) { //만일 엔터키를 눌렀다면
         //
         JTextField 에 입력한 문자열을 읽어와서 DefaultListModel 객체에 추가해야 한다. 
         String name=inputName.getText();
         model.addElement(name);
         inputName.setText("");
      }
      
   }

   @Override
   public void keyReleased(KeyEvent e) {
      //System.out.println("keyReleased");
   }

   @Override
   public void keyTyped(KeyEvent e) {
      // System.out.println("keyTyped");
   }
}
  • JScrollPane : vertical은 세로, horizontal은 가로 스크롤 / AS_NEEDED - 스크롤이 필요할 때 생성, ALWAYS - 항상 유지
  • KeyListener 인터페이스 implements / keyPressed, keyReleased, keyType 오버라이드
  • DefaultListModel에 데이터를 넣고, JList에 담음
  • addElement(String element) : 지정한 요소를 목록 끝에 추가
  • addKeyListener(KeyListener I) : 키 리스너 등록
  • keyPressed(KeyEvent e) : 키를 누르면 호출
  • keyReleased(KeyEvent e) : 키가 릴리스되면 호출
  • keyTyped(KeyEvent e) : 키를 입력하면 호출

 

'Study > JAVA' 카테고리의 다른 글

[JAVA] Exception / try ~ catch  (0) 2023.01.11
[JAVA] Wrapper Class ?  (0) 2023.01.11
[JAVA] Generics Class ?  (0) 2023.01.10
[JAVA] ArrayList ?  (0) 2023.01.10
[JAVA] HashMap / HashSet?  (0) 2023.01.10
Comments