4/28 Java 응용

전자인간·2022년 4월 28일

설명은 주석으로.

자바프레임


import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Window {
    public static void main(String[] args) {
        JFrame frame = new JFrame("첫 GUI 프로그램");    //자바프레임 제목
        JLabel label = new JLabel("Hello World");       //자바프레임 라벨 내용
        JButton button = new JButton("누르지마");       //자바프레임 버튼에 쓰일 내용
        button.addActionListener(new ActionListener() {     //자바프레임 버튼을 눌렀을 때 동작
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("누르지말라고");             // 콘솔창에 출력.
                label.setText("눌러버렸구만");                  // 자바프레임 라벨내용 변경.
            }
        });

        frame.getContentPane().setLayout(new FlowLayout()); //컨텐트팬에 flowlayout 설정.라벨이나 버튼 놓을 공간을 형성한다 생각하자. 참고로 이걸 안적으면 라벨이 있을 칸이 전부 버튼이 차지한다.
        frame.getContentPane().add(label);                  //컨텐트팬에 라벨포함.
        frame.getContentPane().add(button);                 //컨텐트팬에 버튼포함.
        //setDefaultCloseOperation은 system 의 exit 메소드를 사용해 어플리케이션을 종료한다. 어플리케이션으로만 사용.
        //이를 지정하지 않으면 메인프레임을 닫았는데도 JFrame객체는 JVM에서 계속 살아서 실행된다.
        // 즉 사용자에게 보여지는 View는 종료되었지만 프로그램은 계속 실행중인 상태가 된다. 라고 함.
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(300, 100);               //프레임 크기 조절.
        frame.setVisible(true);                             //프레임을 화면에 보여줄 것인가? 없으면 안나옴.

    }
}

<결과>

URL

package com.day_14;
import java.io.FileWriter;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;


public class Main {
    public static void main(String[] args) throws Exception {
        URL url = new URL("https://www.naver.com");
        InputStream inputStream = url.openStream(); //url의 Stream을 반환.
        int i = inputStream.read();             //스트림으로부터 한 바이트를 읽고 int값으로 반환한다.(문자의 아스키코드 int형번호)
        

        FileWriter fw = new FileWriter("naver.html");   //naver.html 파일 생성. naver.txt라 적으면 txt파일 생성.

        while (i != -1){            // url 내용이 끝날 때까지 읽는다.하나씩 읽음. inputStream.read()에서 읽을내용이 없으면 -1 반환함.
            char ch = (char) i;     // int형 아스키코드를 char 으로 변환 ex)33 -> ! / c -> 99
            System.out.print(ch);   // 콘솔창에 출력.
            //System.out.println(i);    // i와 ch가 아스키코드인지 확인용.
            fw.write(ch);       //naver.html 파일에 내용 입력.
            i = inputStream.read(); //inputStream.read()를 할때마다 저장된 Stream을 순차적으로 읽는다.
        }
        fw.close();
    }
}


<결과>

위의 코드 결과 일부

FileWriter로 생성한 파일

Inputstream.read로 불러온 int형이 아스키코드인지 확인한 결과

Filewriter.close를 쓰는 이유
파일은 파일시스템이나 기타 다른 곳에 있으므로 이 내용을 스트림으로 읽어 들이는데 메모리를 소모합니다. 작업이 끝나면 close()를 호출하여 스트림을 닫아 종료된 작업에 대해 메모리를 확보해야 합니다.
출처: https://yangbox.tistory.com/64 [양's World]

안드로이드 스튜디오

  1. 설치방법 : https://dev-hanryangee.tistory.com/12 참고
  2. 오늘 한거 찾을 키워드
    (1) 안드로이드 스튜디오 Device Manager / 가상 디바이스
    (2) 안드로이드 스튜디오 my application(https://devlog-h.tistory.com/25)참고
  3. ※기억안나는 사용방법은 필요하면 찾아서 공부해서 알아보자. 책보고 일일히 공부하는것보다 필요한 부분만 찾아서 해보고 공부하는게 나은 것 같다.

버튼누르면 랜덤으로 숫자바뀌고 숫자마다 다른 사진과 텍스트 출력.

package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import java.util.HashMap;
import java.util.Map;
import java.util.Random;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        Map<Integer, Integer> pictures = new HashMap<>();
        Map<Integer, String> name = new HashMap<>();

        pictures.put(1, R.drawable.img);
        pictures.put(2, R.drawable.img_1);
        pictures.put(3, R.drawable.img_2);

        name.put(1,"수지");	//res-drawable파일에 따로 저장해놓음.
        name.put(2,"나은");
        name.put(3,"윤아");

        Button button = findViewById(R.id.button);
        TextView textView = findViewById(R.id.textView);
        ImageView imageView = findViewById(R.id.imageView2);


        Random random = new Random();

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //Toast.makeText(MainActivity.this, "뭐라할까", Toast.LENGTH_SHORT).show();
                int num = random.nextInt(3) + 1;

                textView.setText("num = " + num);
                imageView.setImageResource(pictures.get(num));
                Toast.makeText(MainActivity.this, name.get(num), Toast.LENGTH_SHORT).show();

            }
        });

    }
}

<참고>
1.MainActivity.java

2.activity.main.xml - activity 화면 출력조정 UI기능

ML KIT 다운받아서 해보기

머신러닝 관련 툴. 미디어파이프 홈페이지에 나온 기능 거의 다 있는 듯.
https://github.com/googlesamples/mlkit 들어가서 다운받고 해보기. 하는법은 구글링.
참고로 실제폰에도 적용가능.

0개의 댓글