티스토리 뷰

[개발] - Java/Mega

Day33-34. 자바 GUI

완벽한 장면 2023. 5. 7. 00:09

GUI

: Java에서 그래픽 요소를 사용하여 사용자와 상호 작용하는 애플리케이션을 개발하는 데 사용되는 기술입니다.

종류 : Swing, JavaFX AWT(추상 윈도우 툴킷) 등.

- 요즘 거의 버려짐

1. Swing

- Swing을 사용하여 다양한 종류의 컴포넌트를 만들 수 있다.

- 컴포넌트는 대화 상자, 버튼, 텍스트 상자, 레이블 및 테이블 등이며, 

  이러한 컴포넌트를 함께 배치하여 사용자가 그래픽 인터페이스와 상호 작용할 수 있도록 제작을 한다.

  

2. JavaFX

- Swing 대체품으로 활용.

- 다양한 컴포넌트 및 이펙트를 포함하며, 스타일링 및 애니메이션에 대한 강력한 지원도 제공하는 중.

 

3. AWT

- Java GUI의 초기 버전이었으며, 현재는 Swing JavaFX와 함께 사용됩니다.

- Java의 기본 그래픽 기능을 포함함.

- AWT 컴포넌트는 플랫폼의 기본 컴포넌트를 사용하여 작성되며, 이는 Java의 이식성을 높여주는 역할을 한다.

 

 

자바 GUI의 기초 틀

GUI 틀

자바 GUI가 켜지면

그 창 전체를 JFrame이라고 생각하면 편하다.

 

1. JFrame

: 사용자 인터페이스를 구성하는 최상위 컨테이너.

- JFrame을 생성하여 컴포넌트를 추가하고 배치함으로써, 사용자에게 표시되는 창을 만들 수 있다.

- 애플리케이션 창의 제목, 크기, 위치 및 종료 동작 등을 제어할 수 있습니다.

- 이벤트 처리를 위한 메서드를 제공하므로

  사용자가 창의 닫기 버튼을 클릭하거나 다른 이벤트가 발생했을 때, 적절한 동작을 수행할 수 있음.

 

2. JPanel

: 컨테이너.

- 다른 컴포넌트들을 포함하는 데 사용된다.

- 또한 사용자 인터페이스의 일부를 나타내는 데 사용됩니다.

- 일반적으로 JPanelJFrame 내에 배치되며, 다른 컴포넌트들을 그룹화하는 데 사용된다..

- JPanel은 레이아웃 매니저를 사용하여 컴포넌트의 위치 및 크기를 관리하며,

  이를 통해 사용자 인터페이스를 구성할 수 있게 된다.

 
<참고 - MVC 패턴>
MVC 패턴

- 자바 GUI를 연습하면, Controller와 View를 합쳐보는 훈련이 된다.


GUI 예제 1

class GUIMake extends JFrame implements ActionListener { // 전체 화면이 됨.

  private JTextField jtf; // 한 줄 글자
  private JTextArea jta; // 여러줄

  GUIMake() {
    JButton jb = new JButton("Save");
    jtf = new JTextField("파일 이름을 입력하시오", 20);
    jta = new JTextArea("파일에 쓸 글을 적으시오", 20, 20);

    Container ct = getContentPane(); //객체생성x, JFrame에서 사용할 수 있게 만드는 애.
    // 컨테이너는 JFrame에서 제공. 컨테이너에 담아줌.
    ct.setLayout(new FlowLayout()); // 내용 넘치면 자동으로 다음줄에 작성

    JPanel p = new JPanel();
    ct.add(jta);
    p.add(jtf);
    p.add(jb);
    ct.add(p); // 마지막에 판넬 자체를 통으로 붙여버렸음(세트화되어서 딱 붙음)
    // 아래로 내려간 이유는, 옆에 붙이려했는데 넘쳐서 자동으로 내려감.
    jb.addActionListener(this); //Save버튼 누르면 액션리스너가 동작하게 만듦.
    //=>버튼 눌렀으면 actionPerformed()메서드가 동작
    // this를 붙인 이유는 내가 ActionListener를 구현했으므로 나에게 있으니까.

    setTitle("Test1");
    setSize(500, 500);
    setVisible(true); // 보여줄거니?
  }

  public void actionPerformed(ActionEvent ae) {
    try {
      // jtf에서 입력된 문자열을 가져와서 s 변수에 저장합니다.
      String s = jtf.getText();
      // s에 해당하는 파일을 생성하기 위해 FileOutputStream을 생성합니다.
      FileOutputStream fos = new FileOutputStream(s);
      // 생성된 FileOutputStream을 사용하여 DataOutputStream을 생성합니다.
      DataOutputStream dos = new DataOutputStream(fos);
      // jta에서 입력된 문자열을 UTF-8 형식으로 파일에 저장합니다.
      dos.writeUTF(jta.getText());
      // FileOutputStream을 닫습니다.
      fos.close();
      // 생성된 파일 이름을 콘솔에 출력합니다.
      System.out.println(s + " 파일 생성~~~~");
    }
    // 예외 발생 시 처리합니다.
    catch (Exception e) {
      // 예외 처리 내용을 작성합니다.
    }
  }
}

public class GUITest1 {

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

실행 결과

 

GUI 예제 2

class Hi extends JFrame implements ActionListener {
  JLabel jl; // JLabel 멤버 변수를 선언합니다.
  Hi(){
    // 컨테이너를 가져와서 FlowLayout을 설정합니다.
    Container ct = getContentPane();
    ct.setLayout(new FlowLayout());

    // 두 개의 버튼을 생성합니다.
    JButton j1 = new JButton("10");
    JButton j2 = new JButton("20");

    // JLabel을 생성하고 컨테이너에 추가합니다.
    jl = new JLabel("하이!!!!!");
    ct.add(j1);
    ct.add(j2);
    ct.add(jl);

    // 버튼에 ActionListener를 등록합니다
    j1.addActionListener(this);
    j2.addActionListener(this);

    // 프레임의 제목과 크기를 설정하고 보이도록 설정합니다.
    setTitle("Two");
    setSize(500,500);
    setVisible(true);
  }

  public void actionPerformed(ActionEvent ae) {

    String input = ae.getActionCommand(); // 이벤트에서 액션 명령을 가져와서 input 변수에 저장합니다.
    String result = "힘내세요!!!!" + input; // result 변수에 "힘내세요!!!!"와 input 변수를 결합하여 저장합니다.
    jl.setText(result); // JLabel의 텍스트를 result 변수로 설정합니다.
    System.out.println(input);
  }
}

public class GUITest2 {

  public static void main(String[] args) {

    new Hi();
  }
}

실행 결과

 

728x90
반응형
Comments
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
250x250