쇼핑몰 홈페이지 (for user)

heeezni·2025년 6월 5일

Java GUI 프로젝트

목록 보기
11/20
post-thumbnail

메인 프레임 (index 역할)

Page 배열을 활용한 화면 전환

public class ShopMain extends JFrame {

    Page[] pages;
    JPanel p_container;

    public ShopMain() {
createPage(); // 1️⃣ 모든 페이지 생성 및 컨테이너에 부착
    showPage(Config.MAIN_PAGE); // 2️⃣ 그 중에서 첫 페이지(메인페이지)만 보이게
}

    // 쇼핑몰의 모든 페이지를 생성하여 컨테이너에 부착
    public void createPage() {

        //페이지들 담을 배열생성(반복문 돌릴거니까)
        pages = new Page[1]; // 배열 크기는 필요한 만큼 수정
        
        //페이지 생성
        pages[Config.MAIN_PAGE] = new MainPage();
        for (int i = 0; i < pages.length; i++) {
            p_container.add(pages[i]);
        }
    }

    // 원하는 페이지 하나만 보여주고 나머지는 숨기기
    public void showPage(int target) {

        //반복문의 대상이 되려면 모든 페이지는 같은 자료형의 배열로 존재해야 함
        //그래서 'Page'라는 최상위 객체를 만들었음
        for (int i = 0; i < pages.length; i++) {
            pages[i].setVisible((i == target)? true : false);
            
          /* setVisible()은 boolean 타입을 인자로 받고
          i == target 이 자체로 이미 boolean값이라 
          setVisible()에 바로 넣어도 전혀 문제 없음 */
        }
    }
}

메인페이지

메인 배너(비주얼 영역)에 이미지 그리기

public class MainPage extends Page {
    JPanel p_visual;   // 메인 배너 영역
    JPanel p_content;  // 상품 리스트 영역
    ImageUtil imageUtil = new ImageUtil();
    Image img;

    public MainPage() {
        // 1. 이미지 생성
        img = imageUtil.getImage("images/패션.jpg", Config.MAIN_VISUAL_WIDTH, Config.MAIN_VISUAL_HEIGHT);

        // 2. 배너 패널 정의 (이미지를 직접 그리는 익명 내부 클래스 사용)
        p_visual = new JPanel() {
            @Override
            protected void paintComponent(Graphics g) {
                super.paintComponent(g); // 배경 초기화
                g.drawImage(img, 0, 0, Config.MAIN_VISUAL_WIDTH, Config.MAIN_VISUAL_HEIGHT, p_visual);
            }
        };

        // 3. 상품 출력 영역 패널 생성 (왼쪽 정렬, 간격 없음)
        p_content = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 0));

        // 4. 패널별 크기 지정
        p_visual.setPreferredSize(new Dimension(Config.MAIN_VISUAL_WIDTH, Config.MAIN_VISUAL_HEIGHT));
        p_content.setPreferredSize(new Dimension(Config.MAIN_VISUAL_WIDTH, 410));
        setPreferredSize(new Dimension(Config.SHOPMAIN_WIDTH, Config.SHOPMAIN_HEIGHT - Config.UTIL_HEIGHT));

        // 5. 배경색 (디버깅 또는 임시 스타일용)
        p_visual.setBackground(Color.CYAN);
        p_content.setBackground(Color.RED);

        // 6. 패널 조립
        add(p_visual);
        add(p_content);

        // 7. 현재 페이지 자체를 보이게
        setVisible(true);
    }
}
profile
아이들의 가능성을 믿었던 마음 그대로, 이제는 나의 가능성을 믿고 나아가는 중입니다.🌱

0개의 댓글