Question1.
다음과 같이 자기가 좋아하는 이미지 4개를 출력하는 프로그램을 작성하라. GridLayout을 이용하고, 4개의 JLabel로 각 이미지를 출력하면 된다.
코드
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Question1 extends JFrame{
private JLabel [] label = new JLabel[4];
private ImageIcon [] ii = { new ImageIcon("images/apple.jpg"),
new ImageIcon("images/banana.jpg"),
new ImageIcon("images/cherry.jpg"),
new ImageIcon("images/mango.jpg")
};
public Question1() {
this.setTitle("4 Images");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = getContentPane();
c.setLayout(new GridLayout());
for(int i = 0; i < label.length; i++) {
label[i] = new JLabel(ii[i]);
c.add(label[i]);
}
this.setSize(500, 180);
this.setVisible(true);
}
public static void main(String[] args) {
new Question1();
}
}
Question2.
다음과 같이 “파일”, “편집”, “보기”, “입력”의 4가지 메뉴를 가진 스윙프로그램을 작성하라. “보기” 메뉴에만 “화면확대”, “쪽윤곽”의 2개의 메뉴아이템이 있고 그 사이에는 분리선이 있다.
코드
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Question2 extends JFrame{
public Question2() {
this.setTitle("메뉴 만들기");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
createMenu();
this.setSize(300, 200);
this.setVisible(true);
}
public void createMenu() {
JMenuBar mb = new JMenuBar();
JMenu [] menu = new JMenu[4];
String [] menuName = { "파일", "편집", "보기", "입력" };
for(int i = 0; i < menu.length; i++) {
menu[i] = new JMenu(menuName[i]);
mb.add(menu[i]);
if(menu[i].getText().equals("보기")) {
menu[i].add(new JMenuItem("화면확대"));
menu[i].addSeparator();
menu[i].add(new JMenuItem("쪽윤곽"));
}
}
setJMenuBar(mb);
}
public static void main(String[] args) {
new Question2();
}
}
Question3.
그림과 같은 두 개의 라디오버튼 중 Red 버튼이 선택되면 배경을 빨간색으로, Blue 버튼이 선택되면 배경이 파란색으로 변하는 프로그램을 작성하라.
코드
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Question3 extends JFrame{
private JRadioButton [] rb = new JRadioButton[2];
private String [] color = { "Red", "Blue" };
public Question3() {
this.setTitle("Two Radio Button");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = getContentPane();
c.setLayout(new FlowLayout());
ButtonGroup bg = new ButtonGroup();
for(int i = 0; i < rb.length; i++) {
rb[i] = new JRadioButton(color[i]);
c.add(rb[i]);
rb[i].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JRadioButton r = (JRadioButton)e.getSource();
if(e.getActionCommand() == "Red") {
c.setBackground(Color.RED);
}
else {
c.setBackground(Color.BLUE);
}
}
});
bg.add(rb[i]);
}
this.setSize(300, 100);
this.setVisible(true);
}
public static void main(String[] args) {
new Question3();
}
}
Question4.
다음 그림과 같이 2개의 체크박스와 버튼을 하나 만들어라. “버튼 비활성화”를 선택하면 버튼이 작동하지 못하게 하고, 해제하면 다시 작동하게 하라. “버튼 감추기”를 선택하면 버튼이 보이지 않도록 하고 해제하면 버튼이 보이도록 하라.
코드
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Question4 extends JFrame{
private JCheckBox [] cb = new JCheckBox[2];
private String [] cb_text = { "버튼 비활성화", "버튼 감추기" };
private JButton btn = new JButton("test button");
public Question4() {
this.setTitle("CheckBox");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = getContentPane();
c.setLayout(new FlowLayout());
for(int i = 0; i < cb.length; i++) {
cb[i] = new JCheckBox(cb_text[i]);
c.add(cb[i]);
cb[i].addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
if(e.getStateChange() == ItemEvent.SELECTED) {
if(e.getItem() == cb[0]) {
btn.setEnabled(false);
}
else {
btn.setVisible(false);
}
}
else {
if(e.getItem() == cb[0]) {
btn.setEnabled(true);
}
else {
btn.setVisible(true);
}
}
}
});
}
c.add(btn);
this.setSize(300, 200);
this.setVisible(true);
}
public static void main(String[] args) {
new Question4();
}
}
Question5.
다음과 같이 ‘파일’ 메뉴에 ‘저장’ 메뉴아이템을 만들고 컨텐트팬에는 JTextArea를 하나 생성하여 스크롤되게 부착한다. 텍스트를 입력한 후 ‘저장’ 메뉴아이템을 선택하면 JOptionPane의 입력 다이얼로그를 출력하여 파일명을 입력받고, 입력된 텍스트를 파일에 저장하라. 파일은 프로젝트 폴더 밑에 저장된다. 만일 단일 텍스트영역에 아무 입력도 없이 ‘저장’ 메뉴아이템이 선택되면 JOptionPane의 메시지 다이얼로그를 이용하여 경고하라.
코드
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.FileWriter;
import java.io.IOException;
import java.util.StringTokenizer;
public class Question5 extends JFrame{
private JTextArea ta = new JTextArea(7, 28);
public Question5() {
this.setTitle("파일 저장");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = getContentPane();
c.setLayout(new BorderLayout());
creatMenu();
ta.setLineWrap(true);
c.add(new JScrollPane(ta), BorderLayout.CENTER);
this.setSize(320, 200);
this.setVisible(true);
}
public void creatMenu() {
JMenuBar mb = new JMenuBar();
JMenu m = new JMenu("파일");
JMenuItem mi = new JMenuItem("저장");
mi.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(ta.getText().equals("")) {
JOptionPane.showMessageDialog(null, "입력한 텍스트가 없습니다", "에러", JOptionPane.ERROR_MESSAGE);
}
else {
String fileName = JOptionPane.showInputDialog("저장할 파일명을 입력하세요");
if(fileName == null) {
return;
}
try {
FileWriter fout = new FileWriter(fileName);
String s = ta.getText();
StringTokenizer st = new StringTokenizer(ta.getText(), "\n");
while(st.hasMoreTokens()) {
fout.write(st.nextToken());
fout.write("\r\n");
}
}
catch (IOException e1) {};
}
}
});
m.add(mi);
mb.add(m);
setJMenuBar(mb);
}
public static void main(String[] args) {
new Question5();
}
}
Question6.
1개의 텍스트필드와 3개의 라디오버튼을 출력하고, 사용자가 라디오버튼을 선택하면 텍스트필드에 입력된 숫자를 10진수, 8진수, 2진수, 16진수로 보여주는 프로그램을 작성하라.
코드
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Question6 extends JFrame{
private JTextField tf1;
private JTextField tf2;
private JRadioButton [] rb = new JRadioButton[4];
private String [] rb_text = {"decimal", "binary", "octal", "hex"};
public Question6() {
this.setTitle("Digit Changer");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = getContentPane();
c.setLayout(new FlowLayout());
ButtonGroup bg = new ButtonGroup();
tf1 = new JTextField(10);
tf2 = new JTextField(10);
c.add(tf1);
c.add(new JLabel("->"));
c.add(tf2);
for(int i = 0; i < rb.length; i++) {
rb[i] = new JRadioButton(rb_text[i]);
c.add(rb[i]);
rb[i].addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
if(e.getStateChange() == ItemEvent.SELECTED && !tf1.getText().equals("")) {
if(e.getItem() == rb[0]) {
tf2.setText(Integer.toString(Integer.parseInt(tf1.getText())));
}
else if(e.getItem() == rb[1]) {
tf2.setText(Integer.toBinaryString(Integer.parseInt(tf1.getText())));
}
else if(e.getItem() == rb[2]) {
tf2.setText(Integer.toOctalString(Integer.parseInt(tf1.getText())));
}
else {
tf2.setText(Integer.toHexString(Integer.parseInt(tf1.getText())));
}
}
}
});
bg.add(rb[i]);
}
this.setSize(300, 150);
this.setVisible(true);
}
public static void main(String[] args) {
new Question6();
}
}
Question 7.
이미지 레이블을 마우스로 드래깅하여 자유롭게 옳기는 프로그램을 작성하라.
코드
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Question7 extends JFrame {
private JLabel label;
private Point sp;
public Question7() {
this.setTitle("이미지 드래깅");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = getContentPane();
c.setLayout(null);
ImageIcon ii = new ImageIcon("images/apple.jpg");
label = new JLabel(ii);
int width = ii.getIconWidth();
int height = ii.getIconHeight();
label.setBounds(150, 150, width, height);
label.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
sp = e.getPoint();
}
});
label.addMouseMotionListener(new MouseMotionListener() {
public void mouseDragged(MouseEvent e) {
Point ep = e.getPoint();
Point p = label.getLocation();
label.setLocation(p.x + ep.x - sp.x, p.y + ep.y - sp.y);
}
public void mouseMoved(MouseEvent e) {}
});
c.add(label);
this.setSize(400, 400);
this.setVisible(true);
}
public static void main(String[] args) {
new Question7();
}
}
Question 8.
10개의 레이블을 순서대로 클릭하는 간단한 게임을 만들어보자. 0에서 9까지 숫자가 있는 레이블을 10개 만들고 이들을 컨텐트팬 내의 임의의 위치에 배치한다. 사용자가 0부터 9까지 순서대로 클릭하여 10개를 모두 클릭하면, 이들을 다시 임의의 위치에 배치한다. 클릭된 숫자는 화면에서 보이지 않게 하고, 번호 순서로 클릭되게 하라.
코드
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Question8 extends JFrame{
private JLabel [] label = new JLabel[10];
private int index = 0;
public Question8() {
this.setTitle("Ten 레이블 클릭");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(getOwner());
Container c = getContentPane();
c.setLayout(null);
for(int i = 0; i < label.length; i++) {
int x = (int)(Math.random()*250);
int y = (int)(Math.random()*250);
label[i] = new JLabel(Integer.toString(i));
label[i].setBounds(x, y, 20, 20);
label[i].setForeground(Color.MAGENTA);
c.add(label[i]);
label[i].addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
JLabel la = (JLabel)e.getSource();
if(label[index] == la) {
la.setVisible(false);
index++;
if(index == 10) {
new Question8();
dispose();
}
}
}
});
}
this.setSize(300, 300);
this.setVisible(true);
}
public static void main(String[] args) {
new Question8();
}
}
Question 9.
영어 단어장을 만드는 프로그램을 작성해보자. 단어는 HashMap<String, String>을 이용하면 된다. 그림과 같이 영어와 한글을 입력하고 저장 버튼을 누르면 해시맵에 저장되며, 영어를 입력하고 검색 버튼을 누르면 검색하여 한글을 출력한다. 이미 있는 영어 단어의 경우 한글을 갱신한다. 단어를 저장할 때마다 저장된 단어 개수는 JLabel을 이용하여 출력한다. 해시맵은 예제 7-5를 참고하라.
코드
import java.util.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Question9 extends JFrame{
private HashMap<String, String> h = new HashMap<String, String>();
private JTextField tf1;
private JTextField tf2;
private JButton [] btn = new JButton[2];
private String [] btn_text = { "저장", "찾기" };
private Color [] btn_color = { Color.YELLOW, Color.GREEN };
private JLabel label;
private JTextArea ta;
public Question9() {
this.setTitle("단어 사전 만들기");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(getOwner());
Container c = getContentPane();
c.setLayout(new FlowLayout());
tf1 = new JTextField(8);
tf2 = new JTextField(8);
ta = new JTextArea(7, 20);
label = new JLabel(Integer.toString(h.size()));
c.add(new JLabel("영어"));
c.add(tf1);
c.add(new JLabel("한글"));
c.add(tf2);
for(int i = 0; i < btn.length; i++) {
btn[i] = new JButton(btn_text[i]);
btn[i].setBackground(btn_color[i]);
c.add(btn[i]);
btn[i].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JButton b = (JButton)e.getSource();
if(b == btn[0] && !tf1.getText().equals("")) {
if(h.containsKey(tf1.getText())) {
h.put(tf1.getText(), tf2.getText());
ta.setText(ta.getText() + "변경 " + "(" + tf1.getText() + ", " + tf2.getText() + ")" + "\n");
}
else {
h.put(tf1.getText(), tf2.getText());
ta.setText(ta.getText() + "삽입 " + "(" + tf1.getText() + ", " + tf2.getText() + ")" + "\n");
label.setText(Integer.toString(h.size()));
}
tf1.setText("");
tf2.setText("");
}
else {
Set<String> keys = h.keySet();
Iterator<String> it = keys.iterator();
while(it.hasNext()) {
String key = it.next();
String value = h.get(key);
if(tf1.getText().equals(key)) {
tf2.setText(value);
}
}
}
}
});
}
c.add(label);
c.add(new JScrollPane(ta));
this.setSize(300, 250);
this.setVisible(true);
}
public static void main(String[] args) {
new Question9();
}
}
Question 10.
실습문제 9번에 단어 삭제와 모두보기 기능을 추가하라.
코드
import java.util.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Question10 extends JFrame{
private HashMap<String, String> h = new HashMap<String, String>();
private JTextField tf1;
private JTextField tf2;
private JButton [] btn = new JButton[4];
private String [] btn_text = { "저장", "찾기", "삭제", "모두 보기" };
private Color [] btn_color = { Color.YELLOW, Color.GREEN, Color.MAGENTA, Color.CYAN };
private JLabel label;
private JTextArea ta;
public Question10() {
this.setTitle("단어 사전 만들기");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(getOwner());
Container c = getContentPane();
c.setLayout(new FlowLayout());
tf1 = new JTextField(8);
tf2 = new JTextField(8);
ta = new JTextArea(7, 20);
label = new JLabel(Integer.toString(h.size()));
c.add(new JLabel("영어"));
c.add(tf1);
c.add(new JLabel("한글"));
c.add(tf2);
for(int i = 0; i < btn.length; i++) {
btn[i] = new JButton(btn_text[i]);
btn[i].setBackground(btn_color[i]);
c.add(btn[i]);
btn[i].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JButton b = (JButton)e.getSource();
if(b == btn[0] && !tf1.getText().equals("")) {
if(h.containsKey(tf1.getText())) {
h.put(tf1.getText(), tf2.getText());
ta.setText(ta.getText() + "변경 " + "(" + tf1.getText() + ", " + tf2.getText() + ")\n");
}
else {
h.put(tf1.getText(), tf2.getText());
ta.setText(ta.getText() + "삽입 " + "(" + tf1.getText() + ", " + tf2.getText() + ")\n");
label.setText(Integer.toString(h.size()));
}
tf1.setText("");
tf2.setText("");
}
else if(b == btn[1] && h.size() != 0){
Set<String> keys = h.keySet();
Iterator<String> it = keys.iterator();
while(it.hasNext()) {
String key = it.next();
String value = h.get(key);
if(tf1.getText().equals(key)) {
tf2.setText(value);
}
}
}
else if(b == btn[2] && h.size() != 0) {
if(h.containsKey(tf1.getText())) {
ta.setText(ta.getText() + "삭제 " + "(" + tf1.getText() + ", " + h.get(tf1.getText()) + ")\n");
h.remove(tf1.getText());
}
label.setText(Integer.toString(h.size()));
}
else {
ta.setText("");
Set<String> keys = h.keySet();
Iterator<String> it = keys.iterator();
while(it.hasNext()) {
String key = it.next();
String value = h.get(key);
ta.setText(ta.getText() + "단어 " + "(" + key + ", " + value + ")\n");
}
label.setText(Integer.toString(h.size()));
}
}
});
}
c.add(label);
c.add(new JScrollPane(ta));
this.setSize(310, 250);
this.setVisible(true);
}
public static void main(String[] args) {
new Question10();
}
}
'☕ Java > 명품 자바 에센셜' 카테고리의 다른 글
명품 자바 에센셜 12장 실습 문제 (0) | 2019.05.28 |
---|---|
명품 자바 에센셜 11장 실습 문제 (0) | 2019.05.22 |
명품 자바 에센셜 9장 실습 문제 (0) | 2019.05.14 |
명품 자바 에센셜 8장 실습 문제 (0) | 2019.05.13 |
명품 자바 에센셜 7장 실습 문제 (0) | 2019.05.12 |