이안의 평일코딩

JAVA의 정석 33일차 - 영화 정보 프로그램(2) 본문

Back-end/Java

JAVA의 정석 33일차 - 영화 정보 프로그램(2)

이안92 2020. 7. 29. 15:20
반응형

2020.07.29(수)

 

NewsManager

package com.sist.data;
import java.util.*;
import java.io.*;
public class NewsManager {
	private static ArrayList<NewsVO> list
	= new ArrayList<NewsVO>();
	// 프로그램 => 시작  => 데이터 읽어서  => ArrayList에 저장
	/*
	 * 파일
	 * 데이터베이스
	 * ========= 한번만 수행
	 */
	static { // 접근할 수 있게끔 static사용
		try {
			FileInputStream fis = new FileInputStream("C:\\javaDev\\daum_news.txt"); //1byte
			BufferedReader in = new BufferedReader(new InputStreamReader(fis)); //2byte로 읽어옴
			while(true) {
				String data = in.readLine();
				if(data==null) break;
				StringTokenizer st = new StringTokenizer(data, "|");
				NewsVO vo = new NewsVO();
				vo.setTitle(st.nextToken());
				vo.setContent(st.nextToken());
				vo.setAuthor(st.nextToken());
				vo.setPoster(st.nextToken());
				vo.setLink(st.nextToken());
				vo.setPoster(st.nextToken());
				list.add(vo); // ArrayList에 저장
			}
			fis.close();
		}catch(Exception ex) {System.out.println(ex.getMessage());}
	}
	public ArrayList<NewsVO> newsListData(int page){
		ArrayList<NewsVO> news = new ArrayList<NewsVO>();
		int i = 0; // i => 5개씩 나눠주는 변수
		int j = 0; // j => for이 수행되는 횟수
		int pagecnt = (page*5)-5; // 출력할 시작위치
		// if(i<5 && j<=pagecnt)
		for(NewsVO vo:list) {
			if(i<5 && j>=pagecnt) {
				news.add(vo);
				i++;
			}
			j++;
		}
		return news;
	}
	public static void main(String[] args) {
		NewsManager m = new NewsManager();
		ArrayList<NewsVO> list = m.newsListData(1);
		int i = 1;
		for(NewsVO vo : list) {
			System.out.println(i+"."+vo.getTitle());
			i++;
		}

	}

}

 

*NewsManager

package com.sist.data;
import java.util.*;
import java.io.*;
/*
 *    String data=title.get(j).text()+"|"
    		    +content.get(j).text().replace("|", " ")+"|"
    		    +author.get(j).text()+"|"
    		    +link.get(j).attr("href")+"|"
    		    +"https:"+img+"\r\n";
 */
public class NewsManager {
    private static ArrayList<NewsVO> list=
    		  new ArrayList<NewsVO>();
    // 프로그램 => 시작 => 데이터 읽어서 => ArrayList에 저장 
    /*
     *   파일 
     *   데이터베이스 
     *   ==========  한번만 수행 
     */
    static
    {
    	try
    	{
    		FileInputStream fis=
    				new FileInputStream("c:\\javaDev\\daum_news.txt");
    		BufferedReader in=
    				new BufferedReader(new InputStreamReader(fis));
    		while(true)
    		{
    			String data=in.readLine();
    			if(data==null) break;
    			
    			StringTokenizer st=new StringTokenizer(data,"|");
    			NewsVO vo=new NewsVO();
    			vo.setTitle(st.nextToken());// 컬럼 
    			vo.setContent(st.nextToken());
    			vo.setAuthor(st.nextToken());
    			vo.setLink(st.nextToken());
    			vo.setPoster(st.nextToken());
    			list.add(vo);
    		}
    		fis.close();
    	}catch(Exception ex){}
    }
    public ArrayList<NewsVO> newsListData(int page)
    {
    	ArrayList<NewsVO> news=new ArrayList<NewsVO>();
    	int i=0;// i => 5개씩 나눠주는 변수 
    	int j=0;// j => for이 수행되는 횟수 
    	int pagecnt=(page*5)-5; // 출력할 시작위치 
    	// if(i<5 && j<=pagecnt)
    	for(NewsVO vo:list)
    	{
    		if(i<5 && j>=pagecnt)
    		{
    			news.add(vo);
    			i++;
    		}
    		j++;
    	}
    	return news;
    }
	public static void main(String[] args) {
		// TODO Auto-generated method stub
        NewsManager m=new NewsManager();
        ArrayList<NewsVO> list=m.newsListData(1);
        int i=1;
        for(NewsVO vo:list)
        {
        	System.out.println(i+"."+vo.getTitle());
        	i++;
        }
	}

}

 

CardPrint

package com.sist.client;
import java.util.*;
import java.awt.*;
import javax.swing.*;
import com.sist.data.*;
public class CardPrint extends JFrame{
    public CardPrint()
    {
    	//setLayout(null);
    	//FoodHouseVO[] food=MainClass3.categoryFoodData();
    	JPanel p=new JPanel();
    	p.setLayout(new GridLayout(10,1));
    	JScrollPane pp=new JScrollPane();
    	Dimension size = new Dimension();//사이즈를 지정하기 위한 객체 생성
    	size.setSize(1000, 600);//객체의 사이즈를 지정
    	p.setPreferredSize(size);//사이즈 정보를 가지고 있는 객체를 이용해 패널의 사이즈 지정
    	pp.setViewportView(p);
    	add("Center",pp);
    	
		/*
		 * for(FoodHouseVO vo:food) { MovieListCard fc=new MovieListCard(vo); p.add(fc);
		 * }
		 */
    	
    	setSize(1300, 500);
    	setVisible(true);
    }
	public static void main(String[] args) {
		// TODO Auto-generated method stub
        new CardPrint();
	}

}

 

ClientMainFrame

package com.sist.client;
import javax.swing.*;
import java.awt.*; // Color,Layout
import java.awt.event.*;// interface

public class ClientMainFrame extends JFrame implements ActionListener, MouseListener{
   
	JLabel title=new JLabel("영화 예매  & 추천 프로그램",JLabel.CENTER);
	MenuForm mf=new MenuForm();
	ChatForm cf=new ChatForm();
	ControllPanel cp;
	int curpage=1;
	int totalpage=16;
	public ClientMainFrame()
	{
		cp =new ControllPanel(this);
		//새로운 창 => 현재 실행중인 윈도우창을 닫음
		title.setFont(new Font("굴림체",Font.BOLD,55));
		//title.setOpaque(true);
		//title.setBackground(Color.magenta);
		setLayout(null);// JFrame (BorderLayout) 사용자 정의로 배치 => null
		title.setBounds(10, 15, 1570, 100);
		// 추가 => add()
		add(title);
		// 메뉴 배치
		mf.setBounds(10, 120, 100, 300 );
		add(mf);
		// 채팅폼 
		cf.setBounds(115, 760, 1465, 200);
		add(cf);
		// 출력화면 
		cp.setBounds(115, 120, 1465, 635);
		add(cp);
		setSize(1600, 1000);
		setVisible(true);
		setDefaultCloseOperation(EXIT_ON_CLOSE);// X버튼 클릭시 종료
		
		mf.b1.addActionListener(this);
		mf.b2.addActionListener(this);
		mf.b5.addActionListener(this);
		
		cp.ff.b1.addActionListener(this);// 이전
		cp.ff.b2.addActionListener(this);// 다음
		
		cp.df.b2.addActionListener(this);// 목록
		
		cp.lf.b1.addActionListener(this);
		cp.lf.b2.addActionListener(this);
		cp.lf.b3.addActionListener(this);
		cp.lf.b4.addActionListener(this);
		cp.lf.b5.addActionListener(this);
		cp.lf.b6.addActionListener(this);
		cp.lf.tf.addActionListener(this);
		
		
		
		for(int i=0; i<10; i++) {
			cp.ff.mc[i].addMouseListener(this);
		}
	}
	public static void main(String[] args) throws Exception {
        // 생성자는 호출시에 반드시  => new 생성자()
		UIManager.setLookAndFeel("com.jtattoo.plaf.mcwin.McWinLookAndFeel");
		new ClientMainFrame();
	}
	public static Image getImage(ImageIcon ii,int w,int h)
    {
    	Image dimg = ii.getImage().getScaledInstance(w, h,
    	        Image.SCALE_SMOOTH);
    	return dimg;
    }
	@Override
	public void actionPerformed(ActionEvent e) {
		if(e.getSource()==mf.b1)
		{
			cp.card.show(cp, "FF");
		}
		else if(e.getSource()==mf.b2)
		{
			cp.card.show(cp, "LF");
		}
		else if(e.getSource()==cp.df.b2) {
			cp.card.show(cp, "FF");
		}
		else if(e.getSource()==mf.b5)
		{
			cp.card.show(cp, "NF");
		}
		else if(e.getSource()==cp.ff.b1)// 이전버튼
		{
			if(curpage>1)
			{
				curpage--;
				cp.ff.p.removeAll();
				cp.ff.moviePrint(curpage);
				cp.ff.repaint();
				cp.ff.p.validate();
			}
			
		}
		else if(e.getSource()==cp.ff.b2)// 다음버튼
		{
			if(curpage<totalpage)
			{
				curpage++;
				cp.ff.p.removeAll();
				cp.ff.moviePrint(curpage);
				cp.ff.repaint();
				cp.ff.p.validate();
			}
		}
		else if(e.getSource()==cp.lf.b1) {
			cp.lf.movieAllData(1);
		}
		else if(e.getSource()==cp.lf.b2) {
			cp.lf.movieAllData(2);
		}
		else if(e.getSource()==cp.lf.b3) {
			cp.lf.movieAllData(3);
		}
		else if(e.getSource()==cp.lf.b4) {
			cp.lf.movieAllData(4);
		}
		else if(e.getSource()==cp.lf.b5) {
			cp.lf.movieAllData(5);
		}
		else if(e.getSource()==cp.lf.b6 || e.getSource()==cp.lf.tf) { //찾기버튼, 검색창엔터
			// 1. 입력된 값 읽기
			String ss = cp.lf.tf.getText();
			if(ss.length()<1) {
				JOptionPane.showMessageDialog(this, "검색어를 입력하세요");
				cp.lf.tf.requestFocus();
				return; // 메소드 종료
			}
			cp.lf.movieFindData(ss);
		}
	}
	@Override
	public void mouseClicked(MouseEvent e) {
		for(int i=0; i<10; i++) {
			if(e.getSource()==cp.ff.mc[i]) {
				if(e.getClickCount()==2) {
					int a=(i+1)+(curpage*10)-10;
					//JOptionPane.showMessageDialog(this, "mno="+a);
					cp.df.detailPrint(a);
					cp.card.show(cp, "DF");
					break;
				}
			}
		}
	}
	@Override
	public void mousePressed(MouseEvent e) {
		
	}
	@Override
	public void mouseReleased(MouseEvent e) {
		
	}
	@Override
	public void mouseEntered(MouseEvent e) {
		
	}
	@Override
	public void mouseExited(MouseEvent e) {
		
	}

}

 

ControllPanel

package com.sist.client;
import java.awt.*;
import javax.swing.*;
public class ControllPanel extends JPanel{
   CardLayout card=new CardLayout();
   ListForm lf=new ListForm();
   DetailForm df=new DetailForm();
   MovieForm ff;
   ClientMainFrame c;
   NewsForm nf;
   
   public ControllPanel(ClientMainFrame c)
   {
	   this.c=c;
	   ff=new MovieForm(c);
	   setLayout(card);
	   add("FF",ff);
	   add("NF",nf);
	   add("LF",lf);
	   add("DF",df);
   }
}

 

DetailForm

package com.sist.client;
import java.awt.*;

import javax.swing.*;

import com.sist.data.MovieManager;
import com.sist.data.MovieVO;
import java.net.*; //URL

public class DetailForm extends JPanel{ //JFrame으로 하면 따로 창을 띄울수있음
   JLabel poster = new JLabel();
   JLabel la1 = new JLabel("",JLabel.CENTER);
   JLabel[] la = new JLabel[7];
   JTextPane ta = new JTextPane();
   JButton b1, b2;
   public DetailForm()
   {
	   setLayout(null);
	   poster.setBounds(10, 15, 350, 450);
	   add(poster);
	   la1.setBounds(365, 15, 500, 45);
	   la1.setFont(new Font("굴림체",Font.BOLD,40));
	   add(la1);
	   JPanel p = new JPanel();
	   p.setLayout(new GridLayout(7,1,5,5));
	   String[] str = {"감독","출연","장르","등급","개봉일","평점","누적"};
	   
	   for(int i=0; i<7; i++) {
		   la[i] = new JLabel(str[i]);
		   la[i].setFont(new Font("굴림체",Font.BOLD,30));
		   p.add(la[i]);
	   }
	   p.setBounds(365, 80, 500, 300);
	   add(p);
	   
	   ta.setEditable(false); //편집불가능
	   JScrollPane js = new JScrollPane(ta);
	   js.setBounds(10, 470, 855, 150);
	   add(js);
	   
	   b1 = new JButton("예매");
	   b2 = new JButton("목록");
	   b1.setBackground(Color.pink);
	   b2.setBackground(Color.cyan);
	   JPanel p2 = new JPanel();
	   p2.add(b1);
	   p2.add(b2);
	   p2.setBounds(365, 385, 200, 35);
	   add(p2);
   }
   public void detailPrint(int mno) {
	   MovieManager m = new MovieManager();
	   MovieVO vo = m.movieDetailData(mno);
	   la1.setText(vo.getTitle());
	   try {
		   URL url = new URL(vo.getPoster());
		   Image img = ClientMainFrame.getImage(new ImageIcon(url),
				   poster.getWidth(), poster.getHeight()); // la1 라벨크기에 맞춰서
		   poster.setIcon(new ImageIcon(img));
		   //ClientMainFrame cf = new ClientMainFrame();
		   //new는 새창이 뜸. static 메소드 or 매개변수 this 사용
		   
	   }catch(Exception ex) {}
	   la[0].setText("감독:"+vo.getDirector());
	   la[1].setText("출연:"+vo.getActor());
	   la[2].setText("장르:"+vo.getGenre());
	   la[3].setText("등급:"+vo.getGrade());
	   la[4].setText("개봉일:"+vo.getRegdate());
	   la[5].setText("평점:"+vo.getScore());
	   la[6].setText("누적:"+vo.getShowUser());
	   ta.setText(vo.getStory());
   }
}

 

ListForm

package com.sist.client;
import java.awt.Color;
import java.awt.event.*;
import java.awt.Image;
import java.util.*;
import com.sist.data.*;
import javax.swing.*;
import javax.swing.table.*;
import java.net.*;
public class ListForm extends JPanel implements MouseListener{
	JButton b1,b2,b3,b4,b5,b6;
	JTextField tf;
	JTable table;
	DefaultTableModel model;
	MovieDetailForm mdf = new MovieDetailForm();
	/*
	 * 기능 => 메소드 ==> 리턴형, 매개변수
	 * 
	 */
	public ListForm() {
		setLayout(null); //FlowLayout => null 사용자 정의 배치
						//setBounds로 배치할거라서
		b1 = new JButton("현재상영영화");
		b2 = new JButton("개봉예정영화");
		b3 = new JButton("박스오피스(주간)");
		b4 = new JButton("박스오피스(월간)");
		b5 = new JButton("박스오피스(연간)");
		b6 = new JButton("검색");
		tf = new JTextField(20);
		JPanel p = new JPanel();
		p.add(b1);p.add(b2);p.add(b3);p.add(b4);p.add(b5);p.add(tf);p.add(b6);
		//add는 쓰는 순서대로 넣어야함
		p.setBounds(10, 25, 900, 35);
		add(p);
		String[] col = {"번호","","제목","감독","장르","등급"};
		Object[][] row = new Object[0][6]; //String, 이미지도 줘야되기때문에 Object씀
		
		// DefaultTableModel => 오버라이딩할 메소드가 있다 (익명의 클래스 => 내부클래스)
		/*
		 * 	내부 클래스 => 쓰레드, 네트워크
		 * 	========
		 * 	 class A {
		 * 		O P C V B
		 * 		class B { ===> 멤버클래스 
		 *      }
		 *   }
		 */
		model = new DefaultTableModel(row,col) {

			@Override
			public boolean isCellEditable(int row, int column) { //편집이 불가능
				return false;
			}

			@Override
			public Class<?> getColumnClass(int columnIndex) { //이미지첨부
				return getValueAt(0, columnIndex).getClass();
			}
			
		};
		
		table = new JTable(model);
		table.setRowHeight(50);
		JScrollPane js = new JScrollPane(table);
		
		js.setBounds(10, 70, 700, 550);
		add(js);
		
		mdf.setBounds(715, 70, 800, 650);
		add(mdf);
		movieAllData(1);
		mdf.detailPrint(1);
		
		table.addMouseListener(this);
	}
	public void movieAllData(int cno) {
		// 데이터 가지고 오기
		MovieManager m = new MovieManager();
		ArrayList<MovieVO> list = m.movieAllData(cno);
		
		// 테이블 한번 지우기
		// 마지막부터 지운다
		for(int i = model.getRowCount()-1; i>=0; i--) { //출력된 전체갯수
			model.removeRow(1);
		}
		
		// 데이터 출력
		/*
		 * java.io, java.net ==> CheckException => 반드시 예외처리
		 */
		for(MovieVO vo : list) {
			try {
				URL url = new URL(vo.getPoster());//http:, c:\\image
				Image img = ClientMainFrame.getImage(new ImageIcon(url), 50, 50);
				Object[] data = {
						vo.getMno(),
						new ImageIcon(img),//이미지 URL
						vo.getTitle(),
						vo.getDirector(),
						vo.getGenre(),
						vo.getGrade()
				};
				model.addRow(data);
			}catch(Exception ex) {ex.printStackTrace();}
		}
	}
	
	public void movieFindData(String ss) {
		// 데이터 가지고 오기
		MovieManager m = new MovieManager();
		ArrayList<MovieVO> list = m.movieFindData(ss);
		
		// 테이블 한번 지우기
		// 마지막부터 지운다
		for(int i = model.getRowCount()-1; i>=0; i--) { //출력된 전체갯수
			model.removeRow(1);
		}
		for(MovieVO vo : list) {
			try {
				URL url = new URL(vo.getPoster());//http:, c:\\image
				Image img = ClientMainFrame.getImage(new ImageIcon(url), 50, 50);
				Object[] data = {
						vo.getMno(),
						new ImageIcon(img),//이미지 URL
						vo.getTitle(),
						vo.getDirector(),
						vo.getGenre(),
						vo.getGrade()
				};
				model.addRow(data);
			}catch(Exception ex) {ex.printStackTrace();}
		}
	}
	@Override
	public void mouseClicked(MouseEvent e) {
		if(e.getSource()==table) {
			if(e.getClickCount()==2) {
				int row = table.getSelectedRow(); //몇번째줄인지 확인
				String mno = model.getValueAt(row, 0).toString();
				mdf.detailPrint(Integer.parseInt(mno));
				
			}
		}
		
	}
	@Override
	public void mousePressed(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}
	@Override
	public void mouseReleased(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}
	@Override
	public void mouseEntered(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}
	@Override
	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}
}

 

MenuForm

package com.sist.client;
import java.awt.*;
import javax.swing.*;
public class MenuForm extends JPanel {
    JButton b1,b2,b3,b4,b5,b6,b7;
    // 초기화 (버튼) ==> 배치 (생성자)
    public MenuForm()
    {
    	//setBackground(Color.orange);
    	b1=new JButton("홈");
    	b2=new JButton("영화찾기");
    	b3=new JButton("영화예매");
    	b4=new JButton("영화추천");
    	b5=new JButton("뉴스");
    	b6=new JButton("영화뮤직");
    	b7=new JButton("종료");
    	
    	setLayout(new GridLayout(7, 1,5,5));
    	add(b1);
    	add(b2);
    	add(b3);
    	add(b4);
    	add(b5);
    	add(b6);
    	add(b7);
    }
}

 

MovieCard

  
package com.sist.client;

import javax.swing.*;
import java.awt.*;
import java.net.*;
public class MovieCard extends JPanel{
   String title,poster;
   Image img;
   public MovieCard(String title,String poster)
   {
	    this.title=title;
	    this.poster=poster;
	    try
	    {
	    	img=Toolkit.getDefaultToolkit().getImage(new URL(poster));
	    }catch(Exception ex) {}
	    setToolTipText(title);
   }
   public void paint(Graphics g)
   {
	   g.drawImage(img,0,0,getWidth(),getHeight(),this);
	  
   }
}

 

MovieDetailForm

package com.sist.client;
import java.awt.*;
import java.net.URL;

import javax.swing.*;

import com.sist.data.MovieManager;
import com.sist.data.MovieVO;

import java.util.*;

public class MovieDetailForm extends JPanel{
	 JLabel poster = new JLabel();
	   JLabel la1 = new JLabel();
	   JLabel[] la = new JLabel[7];
	   JTextPane ta = new JTextPane();
	   JButton b1, b2;
	   public MovieDetailForm() {
		   setLayout(null);
		   poster.setBounds(10, 15, 350, 400);
		   add(poster);
		   la1.setBounds(365, 15, 500, 45);
		   la1.setFont(new Font("굴림체",Font.BOLD,35));
		   add(la1);
		   JPanel p = new JPanel();
		   p.setLayout(new GridLayout(7,1,5,5));
		   String[] str = {"감독","출연","장르","등급","개봉일","평점","누적"};
		   
		   for(int i=0; i<7; i++) {
			   la[i] = new JLabel(str[i]);
			   la[i].setFont(new Font("굴림체",Font.BOLD,30));
			   p.add(la[i]);
		   }
		   p.setBounds(365, 80, 500, 300);
		   add(p);
		   
		   ta.setEditable(false); //편집불가능
		   JScrollPane js = new JScrollPane(ta);
		   js.setBounds(10, 420, 700, 130);
		   add(js);
		   
		   b1 = new JButton("예매");
		   b2 = new JButton("목록");
		   b1.setBackground(Color.pink);
		   b2.setBackground(Color.cyan);
		   JPanel p2 = new JPanel();
		   p2.add(b1);
		   p2.add(b2);
		   p2.setBounds(365, 385, 200, 35);
		   add(p2);
	   }
	   public void detailPrint(int mno) {
		   MovieManager m = new MovieManager();
		   MovieVO vo = m.movieDetailData(mno);
		   la1.setText(vo.getTitle());
		   try {
			   URL url = new URL(vo.getPoster());
			   Image img = ClientMainFrame.getImage(new ImageIcon(url),
					   poster.getWidth(), poster.getHeight()); // la1 라벨크기에 맞춰서
			   poster.setIcon(new ImageIcon(img));
			   //ClientMainFrame cf = new ClientMainFrame();
			   //new는 새창이 뜸. static 메소드 or 매개변수 this 사용
			   
		   }catch(Exception ex) {}
		   la[0].setText("감독:"+vo.getDirector());
		   la[1].setText("출연:"+vo.getActor());
		   la[2].setText("장르:"+vo.getGenre());
		   la[3].setText("등급:"+vo.getGrade());
		   la[4].setText("개봉일:"+vo.getRegdate());
		   la[5].setText("평점:"+vo.getScore());
		   la[6].setText("누적:"+vo.getShowUser());
		   ta.setText(vo.getStory());
	   }
}

 

MovieForm

package com.sist.client;
import java.awt.*;
import javax.swing.*;
import com.sist.data.*;
import java.util.*; //ArrayList

public class MovieForm extends JPanel{
	JButton b1,b2;
	JPanel p = new JPanel();
	MovieCard[] mc = new MovieCard[10];
	ClientMainFrame c;
	public MovieForm(ClientMainFrame c) {
		this.c=c;
		setLayout(new BorderLayout());
		b1=new JButton("◀");
		b2=new JButton("▶");
		p.setLayout(new GridLayout(2,5,5,5));
		moviePrint(1);
		add("West",b1);add("Center",p);add("East",b2);
	}
	public void moviePrint(int page) {
		MovieManager m = new MovieManager();
		ArrayList<MovieVO> list = m.movieListData(page);
		int i = 0;
		for(MovieVO vo: list) {
			mc[i] = new MovieCard(vo.getTitle(), vo.getPoster());
			p.add(mc[i]);
			mc[i].addMouseListener(c);
			i++;
		}
	}
	
}

 

MovieListCard

package com.sist.client;
import java.awt.*;
import javax.swing.*;

import com.sist.data.MovieVO;
import java.net.*;

public class MovieListCard extends JPanel{
	JLabel posterLa = new JLabel();
	JLabel la1,la2,la3;
	JTextPane ta; //JTextArea는 한줄에 글 출력, JTextPane은 밑줄로 내려가게됨
	// 매개변수 ==> 3개 이상이면 => 배열,클래스
	public MovieListCard(MovieVO vo) {
		
		//posterLa.setOpaque(true);
		//posterLa.setBackground(Color.black);
		
		try {
			URL url = new URL(vo.getPoster());
			Image img=ClientMainFrame.getImage(new ImageIcon(url), 200, 200);
			posterLa.setIcon(new ImageIcon(img));
		}catch(Exception ex) {}
		
		la1=new JLabel(vo.getTitle());
		la2=new JLabel(String.valueOf(vo.getScore()));
		la2.setForeground(Color.orange);
		la3=new JLabel(vo.getAddress());
		ta=new JTextPane();
		ta.setText(vo.getReview());
		
		setLayout(null);
		posterLa.setBounds(10, 15, 200, 200);
		la1.setBounds(215, 15, 350, 30);
		la2.setBounds(570, 15, 60, 30);
		la3.setBounds(215, 50, 415, 30);
		ta.setBounds(215, 85, 415, 130);
		
		add(posterLa);
		add(la1);add(la2);
		add(la3);add(ta);
	}
	
}

 

NewsCard

package com.sist.client;
import java.awt.*;
import javax.swing.*;
import java.net.*;
import com.sist.data.NewsVO;
// JPanel ==> HTML ==> <div>
public class NewsCard extends JPanel{
	JLabel poster = new JLabel();
	JLabel title = new JLabel();
	JTextPane tp = new JTextPane();
	JLabel author = new JLabel();
	
	public NewsCard() {
		setLayout(null);
		poster.setBounds(10, 5, 300, 150);
		add(poster);
		title.setBounds(315, 5, 900, 35);
		add(title);
		JScrollPane js = new JScrollPane(tp);
		js.setBounds(315, 45, 900, 120);
		add(js);
		author.setBounds(315, 170, 900, 35);
		add(author);
	}
	
	//값을 채운다
	public void newsPrint(NewsVO vo) {
		try {
			URL url = new URL(vo.getPoster());
			Image img = ClientMainFrame.getImage(new ImageIcon(url), 300, 150);
			poster.setIcon(new ImageIcon(img));
			title.setText(vo.getTitle());
			tp.setText(vo.getContent());
			author.setText(vo.getAuthor());
		}catch(Exception ex) {}
	}
}

 

NewsForm

 

package com.sist.client;
import java.util.*;
import com.sist.data.*;
import java.awt.*;
import javax.swing.*;

public class NewsForm extends JPanel{
	public NewsForm() {
		NewsManager m = new NewsManager();
		ArrayList<NewsVO> news = m.newsListData(1);
		setLayout(new GridLayout(5, 1));
		
		for(NewsVO vo:news) {
			NewsCard nc = new NewsCard();
			nc.newsPrint(vo);
			add(nc);
		}
	}
}

 

======com.sist.data

MovieManager

package com.sist.data;
// 데이터 관리 
import java.util.*;
import java.io.*;
/*
 *    프로그램 작성 
 *    = 파일 : 분리할 수 없다 => 전체를 통으로 저장  ======> AI
 *      = 1. 전체 파일을 읽어서 분리 => 메모리에 저장 
 *                                ===== ArrayList
 *           FileReader
 *           StringTokenizer,split 
 *      = 2. 메모리에서 제어 
 *    = 오라클 : 분리가 되어 있는 상태 
 *      = 필여시마다 오라클에 연결 => 메소드안에서 처리 
 */
public class MovieManager {
    // 데이터 저장 
	private static ArrayList<MovieVO> list=
			 new ArrayList<MovieVO>();
	// 모든 자바파일에서 공통으로 사용 => 반드시 static
	// 프로그램 시작 => 데이터 수집 => ArrayList에 저장후 시작 
	static
	{
		try
		{
			/*
			 *   파일 읽기 => 
			 *   1.한글자씩 읽는 방법 => read()
			 *     FileInputStream
			 *     FileReader
			 *   2.한줄씩 읽는 방법  => readLine()
			 *     전체 데이터를 임시저장공간에 저장후 사용 
			 *     BufferedReader 
			 */
			// 저장된 파일 읽기 
			FileInputStream fr=new FileInputStream("c:\\javaDev\\daum_movie.txt");
			// 메모리에 전체데이터를 모아서 관리 
			BufferedReader in=new BufferedReader(new InputStreamReader(fr));
			while(true)
			{
				String movie=in.readLine(); // readLine() => \n
				if(movie==null) break; // 종료 => 파일을 다 읽은 경우 
				/*
				 *   154|5|젠틀맨(2020)|
				 *   https://img1.daumcdn.net/thumb/C155x225/?
				 *   fname=https%3A%2F%2Ft1.daumcdn.net%2Fmovie%
				 *   2Fmovie-private%2F24957778d17a376a087
				 *   65a121450bb5d9f53a496|평점 07 . 7|가이 리치|매튜 맥커너히|
				 *   범죄/액션|
				 *   2020.02.26 개봉|
				 *   113분, 청소년관람불가|
				 *   81482|정글에는 법칙이 있고, 범죄에도 품격이 있다! 유럽을 장악한 업계의 절대강자 '믹키 피어슨'(매튜 맥커너히)은 자신이 세운 마리화나 제국을 걸고 돈이라면 무엇이든 벌이는 미국의 억만장자와의 빅딜을 시작한다. 소문을 듣고 찾아온 무법자 '드라이 아이'(헨리 골딩)와 돈 냄새를 맡은 사립탐정 '플레처'(휴 그랜트)까지 게임에 끼어들게 되면서 오랫동안 지켜온 정글의 질서는 점점 무너지기 시작하는데… 2월 26일, 고품격 범죄 오락의 신세계가 펼쳐진다!
				 */
				StringTokenizer st=new StringTokenizer(movie,"|");
				while(st.hasMoreTokens())
				{
					MovieVO vo=new MovieVO();
					vo.setMno(Integer.parseInt(st.nextToken()));
					vo.setCno(Integer.parseInt(st.nextToken()));
					vo.setTitle(st.nextToken());
					vo.setPoster("https:"+st.nextToken());
					String score=st.nextToken();
					score=score.substring(score.indexOf("점")+1);
					vo.setScore(score.trim());
					vo.setDirector(st.nextToken());
					vo.setActor(st.nextToken());
					vo.setGenre(st.nextToken());
					String regdate=st.nextToken();
					regdate=regdate.substring(0,regdate.lastIndexOf("개"));
					vo.setRegdate(regdate);
					String grade=st.nextToken();
					grade=grade.substring(grade.indexOf(",")+1);
					vo.setGrade(grade.trim());
					// 90,000 ==> 90000
					vo.setShowUser(Integer.parseInt(st.nextToken().replace(",", "")));
					vo.setStory(st.nextToken());
					list.add(vo);
				}
			}
			
		}catch(Exception ex) 
		{
			System.out.println(ex.getMessage());
		}
	}
	
	public ArrayList<MovieVO> movieListData(int page)
	{
		ArrayList<MovieVO> movies=new ArrayList<MovieVO>();
		int i=0;
		int j=0;
		int pagecnt=(page*10)-10;
		/*
		 *    1page  => 0~9
		 *    2page  => 10~19
		 *    3page  => 20~29
		 */
		for(MovieVO vo:list)
		{
			// pagecnt => 저장 위치 
			if(i<10 && j>=pagecnt)
			{
				movies.add(vo);
				i++;// 10개씩 나눠주는 변수 
			}
			j++;// for돌아가는 횟수
		}
		return movies;
	}
	public int movieTotalPage()
	{
		return (int)(Math.ceil(list.size()/10.0));
		// ceil는 올림 메소드 
	}
	// 상세보기 (리턴형)
	public MovieVO movieDetailData(int mno) {
		return list.get(mno-1); // Array 0번으로 시작하므로 -1
	}
	
	// 영화 전체 읽기
	public ArrayList<MovieVO> movieAllData(int cno){
		ArrayList<MovieVO> movies = new ArrayList<MovieVO>();
		for(MovieVO vo : list) {
			if(vo.getCno()==cno) {
				movies.add(vo);
			}
		}
		return movies;
	}
	// 검색
	public ArrayList<MovieVO> movieFindData(String ss){
		ArrayList<MovieVO> movies = new ArrayList<MovieVO>(); //가변배열
		// list
		for(MovieVO vo : list) {
			if(vo.getTitle().contains(ss)) {
				movies.add(vo);
			}
		}
		return movies;
	}
	public static void main(String[] args) {
		Scanner scan=new Scanner(System.in);
		System.out.print("페이지:");
		int page=scan.nextInt();
		
		MovieManager m=new MovieManager();
		System.out.println(page+" page / "+m.movieTotalPage()+" pages");
		
		// 데이터 읽기 
		ArrayList<MovieVO> list=m.movieListData(page);
		
		for(MovieVO vo:list)
		{
			System.out.println(vo.getTitle());
		}
		/*
		 * for(MovieVO vo:list) { if(vo.getTitle().contains(ss)) {
		 * System.out.println(vo.getTitle()); } }
		 */
	}
}

 

NewsManager

package com.sist.data;
import java.util.*;
import java.io.*;
/*
 *    String data=title.get(j).text()+"|"
    		    +content.get(j).text().replace("|", " ")+"|"
    		    +author.get(j).text()+"|"
    		    +link.get(j).attr("href")+"|"
    		    +"https:"+img+"\r\n";
 */
public class NewsManager {
    private static ArrayList<NewsVO> list=
    		  new ArrayList<NewsVO>();
    // 프로그램 => 시작 => 데이터 읽어서 => ArrayList에 저장 
    /*
     *   파일 
     *   데이터베이스 
     *   ==========  한번만 수행 
     */
    static
    {
    	try
    	{
    		FileInputStream fis=
    				new FileInputStream("c:\\javaDev\\daum_news.txt");
    		BufferedReader in=
    				new BufferedReader(new InputStreamReader(fis));
    		while(true)
    		{
    			String data=in.readLine();
    			if(data==null) break;
    			
    			StringTokenizer st=new StringTokenizer(data,"|");
    			NewsVO vo=new NewsVO();
    			vo.setTitle(st.nextToken());// 컬럼 
    			vo.setContent(st.nextToken());
    			vo.setAuthor(st.nextToken());
    			vo.setLink(st.nextToken());
    			vo.setPoster(st.nextToken());
    			list.add(vo);
    		}
    		fis.close();
    	}catch(Exception ex){}
    }
    public ArrayList<NewsVO> newsListData(int page)
    {
    	ArrayList<NewsVO> news=new ArrayList<NewsVO>();
    	int i=0;// i => 5개씩 나눠주는 변수 
    	int j=0;// j => for이 수행되는 횟수 
    	int pagecnt=(page*5)-5; // 출력할 시작위치 
    	// if(i<5 && j<=pagecnt)
    	for(NewsVO vo:list)
    	{
    		if(i<5 && j>=pagecnt)
    		{
    			news.add(vo);
    			i++;
    		}
    		j++;
    	}
    	return news;
    }
	public static void main(String[] args) {
		// TODO Auto-generated method stub
        NewsManager m=new NewsManager();
        ArrayList<NewsVO> list=m.newsListData(1);
        int i=1;
        for(NewsVO vo:list)
        {
        	System.out.println(i+"."+vo.getTitle());
        	i++;
        }
	}

}

 

NewsCard

package com.sist.client;
import java.awt.*;
import javax.swing.*;
import java.net.*;
import com.sist.data.NewsVO;
// JPanel ==> HTML ==> <div>
public class NewsCard extends JPanel{
	JLabel poster = new JLabel();
	JLabel title = new JLabel();
	JTextPane tp = new JTextPane();
	JLabel author = new JLabel();
	
	public NewsCard() {
		setLayout(null);
		poster.setBounds(10, 5, 300, 150);
		add(poster);
		title.setBounds(315, 5, 900, 35);
		add(title);
		JScrollPane js = new JScrollPane(tp);
		js.setBounds(315, 45, 900, 120);
		add(js);
		author.setBounds(315, 170, 900, 35);
		add(author);
	}
	
	//값을 채운다
	public void newsPrint(NewsVO vo) {
		try {
			URL url = new URL(vo.getPoster());
			Image img = ClientMainFrame.getImage(new ImageIcon(url), 300, 150);
			poster.setIcon(new ImageIcon(img));
			title.setText(vo.getTitle());
			tp.setText(vo.getContent());
			author.setText(vo.getAuthor());
		}catch(Exception ex) {}
	}
}

 

NewsForm

 

package com.sist.client;
import java.util.*;
import com.sist.data.*;
import java.awt.*;
import javax.swing.*;

public class NewsForm extends JPanel{
	public NewsForm() {
		NewsManager m = new NewsManager();
		ArrayList<NewsVO> news = m.newsListData(1);
		setLayout(new GridLayout(5, 1));
		
		for(NewsVO vo:news) {
			NewsCard nc = new NewsCard();
			nc.newsPrint(vo);
			add(nc);
		}
	}
}
반응형
Comments