import javax.swing.*;// swing패키지 전체를 불러온다.
import java.awt.*;// awt패키지 전체를 불러온다.

public class practice6 extends JFrame {
    public static final int JLABEL_NUMBER = 20; // 정수형 상수를 필드에 선언을 하며 20이라는 데이터를 넣었다.
    public practice6(){ //practice6이라는 클래스의 생성자이다.
        setTitle("Random Labels");// 제목을 Random Labels이라고 지었다.
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        Container container = getContentPane();
        container.setLayout(null);// 배치관리자 없도록했다.
        // 그동안 컴포넌트를 주면 주어진 배치관리자가 위치와 크기를 상대적으로 조율하면서 배치를 했다. 근데 이게 반복문을 이용해서 놓는 것이 좋다 생각
        JLabel [] jLabels = new JLabel[JLABEL_NUMBER];// JLabel클래스배열을 정의하고 선언했다.
        int x, y;// 지역변수 정수형을 선언했다.

        for (int i = 0; i < JLABEL_NUMBER; i++)// 반복문 for문이다. JLABEL_NUMBER = 20이므로 20번 반복!
        {
            jLabels[i] = new JLabel(Integer.toString(i));//JLabel배열 원소 순서대로 접근
            x = (int)(Math.random()*200) + 50;// 반복할때마다 새로 난수 데이터를 저장
            y = (int)(Math.random()*200) + 50;// 반복할때마다 새로 난수 데이터를 저장
            jLabels[i].setLocation(x,y);// 난수에 설정된 정수로 위치좌표를 설정한다.
            jLabels[i].setSize(10,10);// 크기를 10x10으로 설정
            jLabels[i].setBackground(Color.BLUE);// 색을 파란색으로 설정
            jLabels[i].setOpaque(true);
            container.add(jLabels[i]);// 컨테이너 즉 여기서는 콘텐츠팬에 부착
        }

        setSize(300,300);// 콘텐츠 팬은 300x300사이즈로 설정
        setVisible(true);// 화면에 보이도록 설정!
    }
    public static void main(String[] args) {
        new practice6();
    }
import javax.swing.*;                                           // javax.swing내에서 모든 클래스 import
import java.awt.*;                                              // java.awt내에서 모든 클래스 import
import java.awt.event.MouseAdapter;                             // java.awtjava.awt.event.MouseAdapter 클래스 import
import java.awt.event.MouseEvent;                               // java.awt.event.MouseEvent 클래스 import

public class JavaProject1_3 extends JFrame {                    // JFrame클래스 내에 있는 메소드,필드를 사용하기 위해서 JavaProject1_3 클래스에 상속을 받았다.
    private JLabel jLabel = new JLabel("2");               // JLabel "2"라는 텍스트를 가진 라벨 객체 생성

    public JavaProject1_3(){                                    // JavaProject1_3 생성자끝
        setTitle("클릭 연습용 응용프로그램");                      // 제목을 클릭 연습용 응용프로그램 라고 한다.
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);         // x(닫기창)을 누르면 프로그램이 종료하도록하는 코드이다.
        Container contentPane = getContentPane();               // // contentPane을 불러온다.
        contentPane.setLayout(null);                            // 배치관리자를 삭제했다. 배치관리자는 컴포넌트 부착할때 해당 컴포넌트 크기와 위치를 조율한다. 내가 크기와 위치를 조율해야

        jLabel.setSize(15,15);                     //배치관리자를 삭제했으니 프로그래머가 컴포넌트 크기
        jLabel.setLocation(100,100);                        // 위치를 설정해줘야한다.
        contentPane.add(jLabel);

        jLabel.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) { // 익명클래스를 사용했다. 여기서는 마우스 어탭터 클래스로 하나하나 모두 오버라이딩할 필요가 없어졌다.
                int x = (int)(Math.random()*450)+1;                 // 1~450까지 난수 생성
                int y = (int)(Math.random()*450)+1;                 // 1~459까지 난수 생성
                jLabel.setLocation(x,y);                            // 두개의 난수를 위치로 넣는다.
            }
        });

        setSize(500, 500);                              // 창의 크키는 가로 500픽셀, 세로 500픽셀
        setVisible(true);                                             // 창이 보이도록 설정한다.
    }


    public static void main(String[] args) {
        new JavaProject1_3();
    }   // 메인메소드 즉 프로그램 실행부분이다.
}

*기본 계산기앱은 블로그는 (3)이 끝입니다.

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

public class AppCal extends JFrame {
    // AppCal클래스의 필드
    private JTextArea printInputtedCalculation = new JTextArea();// 수식을 화면에 보여주는 JTextField 컴포넌트
    private JButton [] calculationNumberButton = new JButton[10]; // 숫자에 해당하는 버튼들
    private JButton [] calculationButton = {
            new JButton("<-(All)"), new JButton("계산"),
            new JButton("+"), new JButton("-"), new JButton("×"), new JButton("÷")
    };// 연산기호에 해당하는 버튼들
    private JTextField printResultCalculation = new JTextField();// 계산 결과를 출력하는 컴포넌트

    // AppCal클래스의 생성자
    public AppCal(){
        setTitle("계산기 프로그램");// 제목을 계산기 프로그램이라는 이름 설정하기
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 창닫기버튼 클릭시 프로그램 종료
        Container contentpane = getContentPane();// 콘텐트팬을 가져오기 => 여기서 gui프로그램을 만든다.
        contentpane.setLayout(new BorderLayout());// 레이아웃을 BorderLayout으로 설정한다.

        contentpane.add(new InputtedCalculation(), BorderLayout.NORTH);//북쪽에 계산식을 보여주는 패널을 부착한다.
        contentpane.add(new ResultOfCalculation(), BorderLayout.SOUTH);// 계산결과를 알려주는 패널을 부착한다.
        contentpane.add(new CalculationButton(), BorderLayout.CENTER);// 중앙에 계산기에 필요한 숫자들과 사칙연산기호등... 버튼들이 있는 패널을 부착한다.
        setSize(380,260);//프로그램 실행시 창을 가로360픽셀, 세로 260픽셀크기로 한다.
        setVisible(true);// 창을 화면에 보이도록 설정한다.
    }
    // AppCal클래스의 내부 클래스로 JPanel을 상속받아 InputtedCalculation 패널클래스구현(계산식(계산수식)을 보여준다.)
    private class InputtedCalculation extends JPanel{
        public InputtedCalculation(){
            setLayout(new GridLayout(1,2)); // 1행과 2렬로 구성된 grid배치관리자로 설정했다.
            setBackground(Color.LIGHT_GRAY);// 배경색을 LIGHT_GRAY로 설정했다.(밝은 회색)
            add(new JLabel("계산식"));// 라벨의 텍스트를 게산식으로 설정해서 부착했다.
            printInputtedCalculation.setEditable(false);// 사용자가 JTextField를 수정하지못하도록 설정했다.
            add((printInputtedCalculation)); // JTextArea를 부착했다.
        }
    }
    // AppCal클래스의 내부 클래스로 JPanel을 상속받아 CalculationButton 패널클래스구현(계산기의 버튼들을 만든다.)
    private class CalculationButton extends JPanel{

        public CalculationButton(){
            int i;
            setLayout(new GridLayout(4,4,3,3));// 4행과 4렬로 구성된 grid배치관리자로 설정했다.추가로 상하좌우 간격을 각각 3픽셀씩 간격을 두도록 했다.

            for (i = 0; i < calculationNumberButton.length; i++)// 0~9까지의 텍스트를 가지는 각각 버튼을 부착하는 반복문이다.(+나중에는 이벤트리스너를 구현해서 처리를 할 것 이다.)
            {
                calculationNumberButton[i] = new JButton(Integer.toString(i)); // 숫자는 반복되는데 텍스트를 넣어야하기에 숫자를 문자열로 바꿔 JButton의 인수에 넣었다.
                add(calculationNumberButton[i]);// 숫자에 해당하는 버튼 부착
                calculationNumberButton[i].addActionListener(new calculatorButtonActionListener(false));// 아직 미완
            }
            for (i = 0; i < calculationButton.length; i++)// 연산기호에 해당하는 텍스트를 가지는 각각 버튼을 부착하는 반복문이다.(+나중에는 이벤트리스너를 구현해서 처리를 할 것 이다.)
            {
                add(calculationButton[i]);// 연산기호에 해당하는 버튼 부착
                if (i>=2)
                    calculationButton[i].addActionListener(new calculatorButtonActionListener(true));// 사칙연산기호에 해당 이벤트 리스너를 적용했다.
            }
            calculationButton[0].addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent actionEvent) {
                    JButton button = (JButton)actionEvent.getSource();
                    printInputtedCalculation.setText("");
                }
            });
            calculationButton[1].addActionListener(new calculatorActionListener());

        }
        private class calculatorButtonActionListener implements ActionListener{
            private boolean operationalSymbols;
            public calculatorButtonActionListener(boolean operationalSymbols){
                this.operationalSymbols = operationalSymbols;
            }
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
                // 이벤트가 발생하면 해당버튼 숫자를 불러와 printInputtedCalculation에 출력한다.
                // 우선 해당버튼 객체를 불러온다. 그 객체 문자를 가져와 printInputtedCalculation에 출력
                JButton button = (JButton)actionEvent.getSource();
                if (operationalSymbols)
                    printInputtedCalculation.append(" " + button.getText() + " ");
                else
                    printInputtedCalculation.append(button.getText());
            }
        }
        private class calculatorActionListener implements ActionListener{
            private String [] calculationElements = printInputtedCalculation.getText().split(" ");
            private ArrayList<String> calculationElements1 = new ArrayList<String>();
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
                // 계산버튼
                // 먼저 문자열 전체부분을 가져온다. 그래서 공백기준으로 쪼개서 넣는다.
                // 반복문 for 안에서 ~~
                // 홀수부분이 연산자, 짝수부분이 피연산자 개수를 파악할 수 있다. size()로 개수도 파악가능하고 인덱스도 파악가능하다. => 이걸 반복문에서 자체로 걸려서 인덱스로 대입을 할지 contain을 해서 안에서 할지
                //
            }
        }
    }
    // AppCal클래스의 내부 클래스로 JPanel을 상속받아 ResultOfCalculation 패널클래스구현()
    private class ResultOfCalculation extends JPanel{
        public ResultOfCalculation(){
            setLayout(new GridLayout(1,2));// 1행과 2렬로 구성된 grid배치관리자로 설정했다.
            setBackground(Color.ORANGE);// 배경색을 ORANGE로 설정했다.(오렌지)
            add(new JLabel("계산결과"));// 라벨의 텍스트를 게산결과로 설정해서 부착했다.
            printResultCalculation.setEditable(false);// 사용자가 JTextField를 수정하지못하도록 설정했다.
            add(printResultCalculation);
        }
    }
    public static void main(String[] args) {
        new AppCal();
    }// 메인메소드에서 AppCal클래스 생성자를 실행시켰다.
}

이벤트처리부분과 사칙연산을 고려해서 넣는게 쉽진않네요..

import java.io.*;								// java.io패키지에 있는 클래스 모두를 import시킨다. 즉 이제 java.io패키지에 있는 클래스를 사용할 수 있다.
import java.util.Scanner;						// java.util패키지에 있는  Scanner클래스를 import시킨다. 즉 이제 Scanner클래스를 사용할 수 있다.

public class FileCopy {							// FileCopy클래스 시작
    public static void main(String[] args) {	// 메인 메소드 시작
        Scanner scanner = new Scanner(System.in);// 키보드로부터 입력 받는 바이너리 값을 문자열, 실수등으로 바꿔서 응용프로그램에 넣어주기위해서 scanner 객체 생성
        System.out.println("복사를 원하는 파일의 전체 경로를 입력하세요:");//복사를 원하는 파일의 전체 경로를 입력하세요: 를 콘솔창에 출력
        String scrFileName = scanner.nextLine();// 원본 파일이름을 키보드로부터 읽어와서 scrFileName에 저장한다.
        
        if (scrFileName.contains(".jpg")){		//입력 받은 파일명에서 확장자 검사하며, jpg파일이면 바디 실행
            FileInputStream fileInputStream = null;// 파일 입력 스트림 객체를 null로 초기화
            FileOutputStream fileOutputStream = null;// 파일 출력 스트림 객체를 null로 초기화

            try {								// 예외처리를 위해서 try - catch구문을 사용한다. => 여기서는 파일 읽기,쓰기, 닫기등을 하는 동안 예외가 발생할 수 있기 때문에 사용했다.
                File destFile = new File("C:\\Temp\\img_copy.jpg");// 파일 객체를 생성하면서 파일 경로를 C:\\Temp\\img_copy.jpg로 설정해주었다. 이는 복사본 파일에 해당한다.

                System.out.println("이미지파일을 복사합니다.");// 이미지파일을 복사합니다 를 콘솔창에 출력
                // File & FileInputStream & FileOutputStream 클래스이용 이미지 복사 코딩
                fileInputStream = new FileInputStream(scrFileName);// 파일 입력 스트림 객체를 생성 scrFileName은 원본파일 경로(이름)이다
                fileOutputStream = new FileOutputStream(destFile); // 파일 출력 스트림 객체를 생성 destFileName은 복사본파일 경로(이름)이다
                int c;							// c는 char를 의미하며 문자이다. 숫자로 표현
               while ((c = fileInputStream.read()) != -1)// 파일 끝을 만날때까지 반복하는 반복문이다.
                {								// 반복문 시작
                    fileOutputStream.write(c);	// 복사본 파일에 .jpg 복사
                }								// 반복문 끝
                fileInputStream.close();		//파일 입력 스트림 객체 닫기
                fileOutputStream.close();		//파일 출력 스트림 객체 닫기

            }catch (IOException e){				//예외를 catch하는 코드이다.IOException은 예외타입(예외클래스)이다.
                System.out.println("입출력 오류가 발생했습니다.");// 예외를 어떻게 처리할 것인지 작성하는 부분이다. 콘솔에 파일 입출력 오류 라고 출력하도록 했다.

            }									// catch문의 바디 종료
        }										// if문 바디 종료
        else if (scrFileName.contains(".txt")){//입력 받은 파일명에서 확장자 검사하며, txt파일이면 바디 실행

            FileReader filereader = null;		// Filereader객체를 null로 초기화
            FileWriter filewriter = null;		// Filewriter객체를 null로 초기화

            try {								// 예외처리를 위해서 try - catch구문을 사용한다. => 여기서는 파일 읽기,쓰기, 닫기등을 하는 동안 예외가 발생할 수 있기 때문에 사용했다.
                File destFile = new File("C:\\Temp\\txt_copy.txt");// 파일 객체를 생성하면서 파일 경로를 C:\\Temp\\img_copy.txt로 설정해주었다. 이는 복사본 파일에 해당한다.

                System.out.println("텍스트파일을 복사합니다.");//텍스트파일을 복사합니다. 를 콘솔창에 출력
                // File & FileReader & FileWriter 클래스 이용 텍스트 파일 복사 코딩
                filereader = new FileReader(scrFileName);// Filereader객체를 생성 scrFileName은 원본파일 경로(이름)이다
                filewriter = new FileWriter(destFile);// Filewriter객체를 생성 destFileName은 복사본파일 경로(이름)이다

                int c;									// c는 char를 의미하며 문자이다. 숫자로 표현
                while ((c = filereader.read()) != -1)// 파일 끝을 만날때까지 반복하는 반복문이다.
                {									// 반복문 시작
                    filewriter.write(c);			// 복사본 파일에 .txt 복사
                }									// 반복문 끝
                filereader.close();					// Filereader객체 닫기
                filewriter.close();					// Filewriter객체 닫기
            }catch (IOException e){					// 예외를 catch하는 코드이다.IOException은 예외타입(예외클래스)이다.
                System.out.println("입출력 오류가 발생했습니다.");// 예외를 어떻게 처리할 것인지 작성하는 부분이다. 콘솔에 파일 입출력 오류 라고 출력하도록 했다.

            }										// catch문의 바디 종료
        }											// else if문 바디 종료
        else										// 위의 조건 모두 만족하지않을때 
            System.out.println("처리할 수 없는 파일 형태입니다.");// 처리할 수 없는 파일 형태입니다. 를 콘솔창에 출력
    }												// 메인메소드 종료
}													// FileCopy클래스 종료

원래 일정대로라면 java계산기(2)블로그를 올렸어야하는데 문제해결이 아직덜되어 틈틈히 복습한 파일처리 개념 적용을 해봤습니다.

+ Recent posts