8. 이미지 갤러리를 만들어보자. 다음과 같이 두 개의 라디오버튼과 이미지가 출력된다. 이미지를 클릭하면 다음 이미지를 보여준다. 이 행동은 프로젝트의 images 폴더에 있는 모든 이미지들에 대해 이루어진다. 그러므로 프로그램 실행 전 images 폴더를 만들고 여러 개의 이미지를 저장해두어야 한다. left 버튼이 선택되어 있으면 왼쪽으로 넘기는 순서로 이미지를 보여주고, right 라디오버튼이 선택되어 있으면 그 반대로 진행된다.
import java.awt.*;
import java.awt.event.*;
import java.util.Vector;
import java.io.*;
import javax.swing.*;
public class eight extends JFrame{
JRadioButton left,right;
Vector<ImageIcon> v=new Vector<ImageIcon>();
String direction="null";
File dir=new File("images");
File files[]=dir.listFiles();
JLabel imageLabel;
int num=0;
public eight() {
setTitle("Image Gallery Practice Frame");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c=getContentPane();
c.setLayout(new BorderLayout());
ButtonGroup group=new ButtonGroup();//버튼 그룹 객체 생성
JPanel radioPanel=new JPanel();
left=new JRadioButton("left");
right=new JRadioButton("right");
group.add(left);
group.add(right);
radioPanel.add(left);
radioPanel.add(right);
left.addItemListener(new MyItemListener());
right.addItemListener(new MyItemListener());
for(int i=0;i<files.length;i++) {
ImageIcon icon=new ImageIcon(files[i].toString());
v.add(icon);
}
imageLabel=new JLabel(v.get(num));
imageLabel.setSize(800,550);
imageLabel.addMouseListener(new MyMouseListener());
c.add(imageLabel,BorderLayout.CENTER);
c.add(radioPanel,BorderLayout.NORTH);
setSize(800,600);
setVisible(true);
}
class MyItemListener implements ItemListener{
public void itemStateChanged(ItemEvent e) {
if(e.getStateChange()==ItemEvent.DESELECTED)
return;
if(right.isSelected())
direction="right";
else
direction="left";
}
}
class MyMouseListener extends MouseAdapter{
public void mousePressed(MouseEvent e) {
if(direction.equals("right")&&num<files.length-1)
{num++;imageLabel.setIcon(v.get(num));}
else if(direction.equals("left")&&num!=0)
{num--;imageLabel.setIcon(v.get(num));}
else
return;
}
}
public static void main(String[]args) {
new eight();
}
}

9. 사용자(me)와 컴퓨터(com)가 가위바위보를 하는 스윙 프로그램을 작성해보자. 가위, 바위, 보에 해당하는 이미지 버튼을 만들어라. 회색 배경에 그려진 3개의 이미지는 각각 가위, 바위, 보를 선택하는 버튼이며, 노란색 배경에는 나(me)와 컴퓨터(com)가 선택한 결과 화면이다. 왼쪽은 사용자의 손이며 오른쪽은 컴퓨터의 손이다. 사용자가 버튼을 선택하는 순간 컴퓨터는 랜덤하게 가위, 바위, 보 중에서 하나를 선택하고 두 사람이 선택한 가위, 바위, 보 이미지가 각각 레이블에 출력된다. 사용자가 이기면 "Me !!!"를, 컴퓨터가 이기면 "Computer !!!"를, 둘이 같으면 "Same !!!"를 출력한다.
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class nine extends JFrame{
ImageIcon rock,scissors,paper;
JButton rockBt,scissorsBt,paperBt;
JPanel jp1,jp2;
JLabel jl1,jl2,jl3;
public nine() {
setTitle("가위 바위 보 게임");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c=getContentPane();
c.setLayout(new BorderLayout());
rock=new ImageIcon("images/Rock.png");
scissors=new ImageIcon("images/Scissors.png");
paper=new ImageIcon("images/Paper.png");
rockBt=new JButton(rock);
scissorsBt=new JButton(scissors);
paperBt=new JButton(paper);
rockBt.setPreferredSize(new Dimension(250,350));
scissorsBt.setPreferredSize(new Dimension(250,350));
paperBt.setPreferredSize(new Dimension(250,350));
rockBt.addMouseListener(new MyMouseListener());
scissorsBt.addMouseListener(new MyMouseListener());
paperBt.addMouseListener(new MyMouseListener());
jp1=new JPanel();
jp1.setLayout(new FlowLayout());
jp1.setBackground(Color.DARK_GRAY);
jp2=new JPanel();
jp2.setLayout(new FlowLayout());
jp2.setBackground(Color.yellow);
jp1.add(scissorsBt);
jp1.add(rockBt);
jp1.add(paperBt);
jl1=new JLabel();
jl2=new JLabel();
jl3=new JLabel();
jl3.setForeground(Color.red);
jp2.add(jl1);
jp2.add(jl2);
jp2.add(jl3);
c.add(jp1,BorderLayout.NORTH);
c.add(jp2,BorderLayout.CENTER);
setSize(800,800);
setVisible(true);
}
public void program(int i) {//0=바위 1=가위 2=보
int com=(int)(Math.random()*3);
if(i==0) {jl1.setIcon(rock);jl1.setText("me");
if(com==0) {jl2.setIcon(rock);jl2.setText("com ");jl3.setText("Same !!!");}
else if(com==1) {jl2.setIcon(scissors);jl2.setText("com ");jl3.setText("Me !!!");}
else if(com==2) {jl2.setIcon(paper);jl2.setText("com ");jl3.setText("Computer !!!");}
}
if(i==1) {jl1.setIcon(scissors);jl1.setText("me");
if(com==0) {jl2.setIcon(rock);jl2.setText("com ");jl3.setText("Computer !!!");}
else if(com==1) {jl2.setIcon(scissors);jl2.setText("com ");jl3.setText("Same !!!");}
else if(com==2) {jl2.setIcon(paper);jl2.setText("com ");jl3.setText("Me !!!");}
}
if(i==2) {jl1.setIcon(paper);jl1.setText("me");
if(com==0) {jl2.setIcon(rock);jl2.setText("com ");jl3.setText("Me !!!");}
else if(com==1) {jl2.setIcon(scissors);jl2.setText("com ");jl3.setText("Computer !!!");}
else if(com==2) {jl2.setIcon(paper);jl2.setText("com ");jl3.setText("Same !!!");}
}
}
class MyMouseListener extends MouseAdapter{
public void mousePressed(MouseEvent e) {
if(e.getSource().equals(rockBt)) {program(0);}
if(e.getSource().equals(scissorsBt)) {program(1);}
if(e.getSource().equals(paperBt)) {program(2);}
}
}
public static void main(String[]args) {
new nine();
}
}

10. 10개의 레이블을 순서대로 클릭하는 간단한 게임을 만들어보자. 0에서 9까지 숫자를 가진 레이블 컴포넌트를 10개 만들고 이들은 프레임 내의 랜덤한 위치에 배치한다. 사용자가 0부터 9까지 순서대로 클릭하여 10개를 모두 클릭하면 다시 10개의 레이블을 랜덤한 위치에 배치한다. 클릭한 레이블 컴포넌트는 화면에서 보이지 않게 하며 반드시 번호 순서대로 클릭되게 하라.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ten extends JFrame{
JLabel []label=new JLabel[11];
String[]list= {"0","1","2","3","4","5","6","7","8","9"};
int stack=0;
public void setLabel() {
for(int i=0;i<list.length;i++) {
label[i].setLocation((int)(Math.random()*540),(int)(Math.random()*540));
label[i].setVisible(true);
}
}
class MyMouseListener extends MouseAdapter{
public void mousePressed(MouseEvent e) {
JLabel jl=(JLabel) e.getSource();
if(jl.getText().equals(Integer.toString(stack))) {
jl.setVisible(false);
stack++;
if(jl.getText().equals("9")) {
setLabel();
stack=0;
}
}
}
}
public ten() {
setTitle("Ten 레이블 출력");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(600,600);
setVisible(true);
Container c=getContentPane();
c.setLayout(null);
for(int i=0;i<list.length;i++) {
label[i]=new JLabel(list[i]);
label[i].setSize(20,20);
label[i].setFont(new Font("Serif",Font.BOLD,20));
label[i].setForeground(Color.MAGENTA);
int x=(int)(Math.random()*550);
int y=(int)(Math.random()*550);
label[i].setLocation(x,y);
label[i].addMouseListener(new MyMouseListener());
c.add(label[i]);
}
setLabel();
}
public static void main(String[]args) {
new ten();
}
}

'JAVA > 공부' 카테고리의 다른 글
13. 스레드와 멀티태스킹 (0) | 2021.02.03 |
---|---|
12. 그래픽 (0) | 2021.01.28 |
10. 자바의 이벤트 처리 (0) | 2021.01.19 |
9. 자바 GUI 기초, AWT와 스윙(Swing) (0) | 2021.01.19 |
8. 입출력 스트림과 파일 입출력 (0) | 2021.01.17 |