본문 바로가기
솔루션모음/파워자바 프로그래밍

[파워자바] 16장 프로그래밍 솔루션 답지

by 이얏호이야호 2023. 2. 16.

 

1.

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

class Myframe extends JFrame
{
	JButton button;
	JTextField t1;
	JTextField t2;
	public Myframe()
	{
		setSize(250,120);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setTitle("마일을 킬로미터로 변환");
				
		JPanel panel1=new JPanel();
		JLabel label=new JLabel("거리를 마일 단위로 입력하시오");
		t1=new JTextField(5); 
		t2=new JTextField(20);
		button=new JButton("변환");
		button.addActionListener(new MyListener());
		t1.setText("1");
		
		t2.setEditable(false);
		panel1.add(label);
		panel1.add(t1);
		panel1.add(button);
		panel1.add(t2);
		this.add(panel1);

		setVisible(true);
	}
	private class MyListener implements ActionListener{
		public void actionPerformed(ActionEvent e)
		{
			if(e.getSource()==button)
			{
				int t=Integer.parseInt(t1.getText());
				double k=t*1.609344;
				t2.setText(t+" 마일은 "+k+" 킬로미터입니다.");
			}
		}
	}
}
public class Pro1 {
	public static void main(String[] arge)
	{
		Myframe f=new Myframe();
	}
}

 

2.

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

class Myframe extends JFrame
{
	JButton button;
	JTextField t1;
	JTextField t2;
	JTextField t3;
	public Myframe()
	{
		setSize(230,150);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setTitle("이자 계산기");
		
		JPanel panel1=new JPanel();

		JLabel label1=new JLabel("원금을 입력하시오");
		JLabel label2=new JLabel("이율을 입력하시오");
		t1=new JTextField(5); 
		t2=new JTextField(5);
		t3=new JTextField(15);
		button=new JButton("변환");
		button.addActionListener(new MyListener());
		
		t3.setEditable(false);
		panel1.add(label1);
		panel1.add(t1);
		panel1.add(label2);
		panel1.add(t2);
		panel1.add(button);
		panel1.add(t3);
		this.add(panel1);

		setVisible(true);
	}
	private class MyListener implements ActionListener{
		public void actionPerformed(ActionEvent e)
		{
			if(e.getSource()==button)
			{
				int t=Integer.parseInt(t1.getText());
				float a=Float.parseFloat(t2.getText());
				int k=(int)(t*(a/100));
				t3.setText("이자는 연 "+k+"만원 입니다.");
			}
		}
	}
}
public class Pro2 {
	public static void main(String[] arge)
	{
		Myframe f=new Myframe();
	}
}

 

 

3.

//이항 연산을 표현하는 클래스
public class DyadicOperation {
       private double operandX;
       private double operandY;
       private char operator;
 
       //생성자
       public DyadicOperation(){
             init();
       }
       
       //초기화
       public void init(){
             setOperandX(0);
             setOperandY(0);
             setOperator('=');          
       }
 
       //접근자
       public double getOperandX() {return operandX;}
       public double getOperandY() {return operandY;}
       public char getOperator() {return operator;}
       
       //설정자
       public void setOperandX(double operandX) {this.operandX = operandX;}
       public void setOperandY(double operandY) {this.operandY = operandY;}
       public void setOperator(char operator) {this.operator = operator;}
       
       //식 입력(피연산자 일때)
       public void inputFomula(double operand){
             if(operator == '='){
                    setOperandX(operand);
                    setOperandY(operand);
             }
             else{
                    setOperandY(operand);
             }
       }
       
       //식 입력(연산자 일때)
       public boolean inputFomula(char operator){
             if(operator != '=' && operator != '%'){
                    if(getOperator() != '='){
                           calculate();
                           setOperator(operator);
                           return true;
                    }
                    else{
                           setOperator(operator);
                           return false;
                    }
             }
             else if(operator == '=' && getOperator() != '='){
                    calculate();
                    return true;
             }
             else if(operator == '%' && getOperator() == '*'){
                    setOperandX(getOperandX()*getOperandY()*0.01);
                    return true;
             }
             return false;
       }
       
       //연산
       public void calculate(){
             switch(getOperator()){
             case '+':
                    setOperandX(getOperandX() + getOperandY());
                    break;
             case '-':
                    setOperandX(getOperandX() - getOperandY());
                    break;
             case '*':
                    setOperandX(getOperandX() * getOperandY());
                    break;
             case '/':
                    setOperandX(getOperandX() / getOperandY());
                    break;
             }
       }
}
----------------------------------------------------------------
----------------------------------------------------------------
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
 
//계산기를 구현 하는 클래스
public class MyCalculator extends JFrame {
       private JTextField f;//텍스트 필드
       private boolean resultPrint;//결과 출력 상태
       private DyadicOperation operation;//이항 연산 클래스
       private Real num;//실수
 
       //생성자
       public MyCalculator(){
             //슈퍼 클래스 생성자 명시적 호출을 통한 프레임 제목 설정
             super("MyCalculator");
 
             f = new JTextField("0.");//텍스트 필드
             setResultPrint(false);//결과 출력 상태
             operation = new DyadicOperation();//이항 연산 클래스
             num = new Real();//실수
 
             //메인 패널로 사용할 패널을 생성
             JPanel mainPanel = new JPanel();
             //flow, border, grid 중 텍스트 필드와 키패널의 비대칭적 크기를 고려해 border 선택
             mainPanel.setLayout(new BorderLayout(10,10));
 
             //텍스트 필드 생성 및 추가
             f.setHorizontalAlignment(JTextField.RIGHT);
             f.setEditable(false);
             f.setBackground(Color.WHITE);
             mainPanel.add(f,BorderLayout.NORTH);
 
             //키패널 생성 및 추가
             JPanel mainKeyPanel = new JPanel();
             mainKeyPanel.setLayout(new BorderLayout(10,10));
             KeyPanel1 keyPanel1 = new KeyPanel1();
             KeyPanel2 keyPanel2 = new KeyPanel2();
             mainKeyPanel.add(keyPanel1,BorderLayout.NORTH);
             mainKeyPanel.add(keyPanel2,BorderLayout.CENTER);
             mainPanel.add(mainKeyPanel,BorderLayout.CENTER);
             
             //메인 패널을 프레임에 추가
             add(mainPanel);
 
             //flow, border, grid 중 프레임과 메인 패널 사이에 적절한 공간을 줄 수 있는 flow 선택
             setLayout(new FlowLayout(FlowLayout.CENTER, 10, 10));
             setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
             pack();
             setResizable(false);
             setVisible(true);
       }
       
       //키패널 클래스 1
       class KeyPanel1extends JPanel{
             public KeyPanel1(){
                    //flow, border, grid 중 버튼 정렬을 하기 가장 적합한 grid 선택
                    setLayout(new GridLayout(0,3,10,10));
                    
                    String[] str = new String[]      {"Backspace", "CE", "C"};
                    JButton[] button = new JButton[str.length];
                    //Backspace, CE, C의 순서로 버튼이 추가 되도록 반복
                    for(int i=0; i<str.length; i++){
                           button[i] = new JButton(str[i]);
                           button[i].setBackground(Color.WHITE);
                           button[i].setForeground(Color.RED);
                           add(button[i]);
                           button[i].addActionListener(new MyActionListener1());
                    }
             }
       }
       
       //액션 리스너1 클래스
       class MyActionListener1 implements ActionListener{//내부 클래스
             @Override
             public void actionPerformed(ActionEvent e) {
                    if(e.getActionCommand()=="C"){//초기화
                           operation.init();
                           num.init();
                    }
                    else if(e.getActionCommand()=="CE"){//현재 입력한 값 초기화
                           num.init();
                    }
                    else{//BackSpace
                           num.backSpace();
                    }
                    f.setText(num.toString());
             }
       }
 
       //키패널 클래스 2
       class KeyPanel2extends JPanel{//내부 클래스
             public KeyPanel2(){//생성자
                    //flow, border, grid 중 버튼 정렬을 하기 가장 적합한 grid 선택
                    setLayout(new GridLayout(0,5,10,10));
 
                    String[] str = new String[]
                                 {"7", "8", "9", "/", "sqrt", "4", "5", "6", "*", "%",
                                 "1", "2", "3", "-", "1/x", "0", "+/-", ".", "+", "="};
                    JButton[] button = new JButton[str.length];
                    //7, 8, 9, /, sqrt,4,5,6,*,%,1,2,3,-,
                    //1/x, 0, +/-, ., +, =의 순서로 버튼이 추가 되도록 반복
                    for(int i=0; i<str.length; i++){
                           button[i] = new JButton(str[i]);
                           add(button[i]);
                           button[i].setBackground(Color.WHITE);
                           button[i].addActionListener(new MyActionListener2());
                    }
                    button[3].setForeground(Color.RED);
                    button[8].setForeground(Color.RED);
                    button[13].setForeground(Color.RED);
                    button[18].setForeground(Color.RED);
                    button[19].setForeground(Color.RED);
             }
       }
 
       //액션 리스너2 클래스
       class MyActionListener2 implements ActionListener{
             @Override
             public void actionPerformed(ActionEvent e) {//내부 클래스
                    // TODO Auto-generated method stub
                    String str = e.getActionCommand();
                    if(str.length() == 1){//단문자 인 경우
                           switch(str.charAt(0)){
                           //이항 연산자인 경우
                           case '/':
                           case '*':
                           case '-':
                           case '+':
                           case '=':
                           case '%':
                                 if(num.toString() != "0."){
                                        operation.inputFomula(Double.parseDouble(num.toString()));
                                 }
                                 setResultPrint(operation.inputFomula(str.charAt(0)));
                                 if(isResultPrint()){
                                        num.setReal(operation.getOperandX());
                                        f.setText(num.toString());
                                 }
                                 num.init();
                                 break;
                           default:
                                 num.inputAppend(str.charAt(0));
                                 f.setText(num.toString());
                                 break;
                           }
                    }
                    else{
                           if(str == "+/-"){
                                 num.sign();
                           }
                           else if(str == "1/x"){
                                 num.inverse();
                           }
                           else{
                                 num.sqrt();
                           }
                           f.setText(num.toString());
                    }
             }
       }
       
       //접근자
       public boolean isResultPrint() {return resultPrint;}
       
       //설정자
       public void setResultPrint(boolean resultPrint) {this.resultPrint = resultPrint;}
 
       public static void main(String[] args){
             MyCalculator c=new MyCalculator();
       }
}

 
4.
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
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.JPanel;
import javax.swing.JTextField;

class MyPanel extends JPanel
{
	int x=250, y=30;
	public void move(int dx) {
		this.x += dx;
		repaint();
	}
	@Override
	protected void paintComponent(Graphics g) {
		super.paintComponent(g);
		this.setBackground(Color.yellow);
		g.setColor(Color.red);
		g.fillRect(x, y, 10, 200);
	}
}
class Myframe extends JFrame
{
	MyPanel panel;
	JPanel panel1;
	JButton b1, b2;
	public Myframe()
	{
		setSize(500,300);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setTitle("박스움직이기");
				
		panel=new MyPanel();
		panel1=new JPanel();
		b1=new JButton("왼쪽으로 이동");
		b2=new JButton("오른쪽으로 이동");
		panel1.add(b1);
		panel1.add(b2);
		add(panel, BorderLayout.CENTER);
		add(panel1, BorderLayout.SOUTH);
		b1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e)
	{
		panel.move(-10);
	}});
		b2.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e)
	{
		panel.move(10);
	}});
		setVisible(true);
	}
}
public class MyFrameTest {
	public static void main(String[] arge)
	{
		Myframe f=new Myframe();
	}
}
 

5.

import java.awt.Font;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JFrame;
import javax.swing.JLabel;

class Myframe extends JFrame
{
	JLabel label;
	public Myframe()
	{
		setSize( 700,200);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setTitle("박스움직이기");
				
		label = new JLabel("Don't cry before you are hurt");
		label.setFont(new Font("Serif", Font.BOLD | Font.ITALIC, 50));
		label.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseExited(MouseEvent arg0) {
				// TODO Auto-generated method stub
				super.mouseExited(arg0);
				label.setText("Don't cry before you are hurt");
			}

			public void mouseEntered(MouseEvent arg0) {
				label.setText("다치기도 전에 울지말라");
			}
		});
		add(label);
		setVisible(true);
	}
}
public class MyFrameTest {
	public static void main(String[] arge)
	{
		Myframe f=new Myframe();
	}
}

댓글