우아한 프로그래밍

1. 소스코드

 

import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

public class MovieCardSuffleApp extends JFrame implements ActionListener {

    // 포스터 리스트
    List<Poster> posterList = null;

    // 현재 인덱스
    int index = 0;

    // 폰트
    Font df = new Font("맑은 고딕", Font.BOLD, 20);
    Font df1 = new Font("맑은 고딕", Font.PLAIN, 15);

    // 카드레이아웃
    CardLayout cd = null;

    // 텍스트  컴포넌트
    JTextArea multi = null;

    // 상단부 패널
    JPanel north = null;

    public MovieCardSuffleApp() throws IOException {

        // 포스터 초기화
        initPosterList();
        // 프레임초기화
        initFrame();
        // 컴포넌트 초기화
        initComponent();

        setLocationRelativeTo(null);
        setResizable(false);
        setVisible(true);
    }

    private void initComponent() throws IOException {

        JPanel mp = new JPanel();
        BorderLayout bl = new BorderLayout();
        mp.setLayout(bl);

        north = new JPanel();
        north.setPreferredSize(new Dimension(600, 380));
        //north.setBackground(Color.GREEN);

        cd = new CardLayout();
        north.setLayout(cd);

        for( int i = 0;  i < posterList.size(); i++){
            Poster p = posterList.get(i);
            BufferedImage img = ImageIO.read(new URL(p.getUrl()));
            Image dimg = img.getScaledInstance(280, 380,  Image.SCALE_SMOOTH);
            ImageIcon imageIcon = new ImageIcon(dimg);
            JLabel l = new JLabel(imageIcon);
            north.add(l, "CARD_" + (i + 1));
        }

        north.setBorder(BorderFactory.createEmptyBorder(20 , 0 , 0 , 0));


        JPanel center = new JPanel();
        center.setPreferredSize(new Dimension(600, 250));
       // center.setBackground(Color.RED);

        FlowLayout f = new FlowLayout();

        multi = new JTextArea(8, 40);
        multi.setText(posterList.get(0).getContent());
        multi.setWrapStyleWord(true);
        multi.setLineWrap(true);
        multi.setEditable(false);
        multi.setFont(df1);

        center.setLayout(f);
        f.setVgap(20);
        center.add( new JScrollPane(multi));

        JPanel south = new JPanel();
        south.setPreferredSize(new Dimension(600, 170));
        //south.setBackground(Color.BLACK);
        f = new FlowLayout() ;
        f.setVgap(50);
        south.setLayout(f);

        JButton b1 = new JButton("처음");
        b1.setFont(df);
        b1.addActionListener(this);
        b1.setPreferredSize(new Dimension(120, 50));

        JButton b2 = new JButton("이전");
        b2.setFont(df);
        b2.addActionListener(this);
        b2.setPreferredSize(new Dimension(120, 50));

        JButton b3 = new JButton("다음");
        b3.setFont(df);
        b3.addActionListener(this);
        b3.setPreferredSize(new Dimension(120, 50));

        JButton b4 = new JButton("마지막");
        b4.setFont(df);
        b4.addActionListener(this);
        b4.setPreferredSize(new Dimension(120, 50));

        south.add(b1);
        south.add(b2);
        south.add(b3);
        south.add(b4);

        mp.add(north, BorderLayout.PAGE_START);
        mp.add(center, BorderLayout.CENTER);
        mp.add(south, BorderLayout.PAGE_END);

        setContentPane( mp);
    }

    private void initFrame() {
        this.setTitle("영화카드셔플");
        setSize(600, 800);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    // 포스터리스트 초기화
    private void initPosterList() {
        posterList = new ArrayList<Poster>();

        Poster poster = new Poster();
        poster.setUrl("https://pgnqdrjultom1827145.cdn.ntruss.com/img/1d/ec/1dec29208cda7bd05deca3cdc91f88a0fb871ee54c5ffb40a797909e3427f701_v1.jpg");
        poster.setContent("10년 전 의문의 사고가 일어난 시설에서 홀로 탈출한 후 모든 기억을 잃은 ‘자윤’. 나이도, 이름도 모르는 자신을 거두고 키워준 노부부의 보살핌으로 씩씩하고 밝은 여고생으로 자라났다. 어려운 집안사정을 돕기 위해 상금이 걸린 오디션 프로그램에 출연한 자윤, 방송이 나간 직후부터 의문의 인물들이 그녀 앞에 나타난다. 자윤의 주변을 맴돌며 날카롭게 지켜보는 남자 ‘귀공자’, 그리고 과거 사고가 일어난 시점부터 사라진 아이를 찾던 ‘닥터 백’과 ‘미스터 최’까지 자신은 전혀 기억하지 못하는 그들의 등장으로, 자윤은 혼란에 휩싸이게 되는데...! 그들이 나타난 후 모든 것이 바뀌었다");
        posterList.add(poster);

        poster = new Poster();
        poster.setUrl("https://i.pinimg.com/564x/fe/84/99/fe8499fb9dabf61f6be980d69fd248fd.jpg");
        poster.setContent("스코틀랜드 장군 맥베스는 막료 뱅코와 개선하다가 황야에서 세 마녀를 만나 그와 뱅코의 자손이 앞으로 왕이 된다는 예언을 듣는다. ... 결국 맥베스는 맥더프와 싸워 끝내 맥더프가 맥베스를 죽였고 맥더프는 덩컨의 아들에게 왕위를 돌려주었다.");
        posterList.add(poster);

        poster = new Poster();
        poster.setUrl("https://upload.wikimedia.org/wikipedia/ko/c/c3/%EB%82%B4_%EC%9D%B4%EB%A6%84%EC%9D%80_%EC%B9%B8_%EC%98%81%ED%99%94_%ED%8F%AC%EC%8A%A4%ED%84%B0.jpg");
        poster.setContent("천재 자폐증 남자 칸의 기적 같은 여정이 시작된다!자폐증을 가지고 있지만 천재적인 지적 능력과 어머니로부터 얻게 된, 세상을 바라보는 순수한 눈을 가진 ‘칸’. 그는 어머니의 죽음 이후 동생이 있는 미국으로 향한다.칸은 우연히 만난 아름다운 싱글맘 ‘만디라’와 운명적인 사랑에 빠져 결혼을 하게 된다.하지만, 9.11테러 이후 한 순간 행복은 깨지게 된다. 오해가 낳은 끔찍한 사건으로 모든 것을 잃은 만디라는 모든 원망을 칸에게 돌리게 되고 칸은 그녀와의 약속을 지키기 위해 대통령을 만나기 위한 여정을 시작한다. 과연 그는 대통령을 만날 수 있을까? 그리고 그가 전하려는 말은 무엇일까?");
        posterList.add(poster);

        poster = new Poster();
        poster.setUrl("http://demerc.kr/wp-content/uploads/2019/03/Perfectgirl_TeaserPoster-719x1024.png");
        poster.setContent("아름다운 여대생 ‘예신’은 멋진 남자친구 ‘미아오’와 연애중이다.어느 날 폭우가 내린 뒤 예신의 집 정원에서 시체 2구가 발견되고그 중 하나가 실종된 미아오의 전 여자친구인 것으로 드러난다.알고 보니 과거에 미아오가 교제했던 여자친구들이모두 의문의 자살로 죽었다는 사실이 밝혀지면서완벽해 보이던 그녀의 삶에 균열이 생기기 시작하는데...너무나 사랑하는 애인의전 여자친구들을 죽인 범인은 과연 누구일까?");
        posterList.add(poster);

        poster = new Poster();
        poster.setUrl("http://imgmovie.naver.com/mdi/mi/0537/53741_P00_153933.jpg");
        poster.setContent("그녀가 사라졌다!결혼 한 달 전, 부모님 댁에 내려가던 중 휴게소에 들른 문호와 선영. 커피를 사러 간 사이 선영은 한 통의 전화를 받고 급하게 나가고, 돌아온 문호를 기다리고 있는 건 문이 열린 채 공회전 중인 차 뿐이다. 몇 번을 걸어봐도 꺼져있는 휴대폰, 내리는 빗속으로 약혼녀가 사라졌다. 그녀의 모든 것은 가짜다! 미친 듯 선영을 찾는 문호. 돌아온 그녀의 집은 급하게 치운 흔적이 역력하고 다니던 회사의 이력서까지 허위다. 단서가 사라질 즈음, 선영이 개인파산을 했었고 정작 면책 서류에 남은 그녀의 필적과 사진은 다른 사람의 것이라는 충격적인 사실이 밝혀진다. 가족도 없고… 친구도 없고… 지문도 없다! 내가 사랑했던 그녀는 누구인가?그녀를 찾으려면 진짜 이름부터 알아내야 하는 문호는 전직 강력계 형사인 사촌 형 종근에게 도움을 청한다. 통장 잔액을 인출하고, 지문까지 지우고 완벽하게 사라진 그녀의 행적에 범상치 않은 사건임을 직감하는 종근. 결국 그는 선영의 실종이 살인사건과 연관되어 있음을 본능적으로 느끼는데... 추적하면 할수록 드러나는 충격적 진실과연, 그녀의 정체는 무엇인가.");
        posterList.add(poster);
    }

    public static void main(String[] args) throws IOException {
        new MovieCardSuffleApp();
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        JButton button = ((JButton)e.getSource());

        if( button.getText().equals("처음")){
            cd.first(north);
            index = 0;
            setContent();
        }else if( button.getText().equals("이전")){
            if( index > 0){
                cd.previous(north);
                index--;
                setContent();
            }
        }else if( button.getText().equals("다음")){
            if( index < posterList.size() - 1){
                cd.next(north);
                index++;
                setContent();
            }
        }else if( button.getText().equals("마지막")){
            cd.last(north);
            index = posterList.size() - 1;
            setContent();
        }
    }

    private void setContent() {
        Poster p = posterList.get(index);
        multi.setText(p.getContent());
    }
}

class Poster {
    String url;
    String content;

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }
}
​

2. 실행화면

 

 

profile

우아한 프로그래밍

@자바조아!

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!