1번
package GUI_programming;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;
public class DrawingPanel extends JPanel
{
int korean, english, math;
public void paint(Graphics g)
{
g.clearRect(0, 0, getWidth(), getHeight());
g.drawLine(50, 250, 350, 250);
for(int cnt = 1; cnt < 11; cnt++)
{
g.drawString(cnt * 10 + "", 25, 255 - 20 * cnt); // 이 라인의 코드 의미좀 가르쳐주세요
// 이 명령문은 그래프의 Y 축 오른쪽에 10, 20, 30 ~ 100이라는 숫자를 표시하는 역할을 합니다. ([그림 19-22] 참고)
// 첫번째 파라미터는 출력할 문자열을 의미하며, 이 중 cnt * 10라는 값은 cnt가 1부터 10까지 변하는 동안
// 10, 20, 30 ~ 100이라는 수를 산출하는 연산식입니다. 그런데 이 메서드의 첫 번째 파라미터는
// 정수 타입으로 선언되어 있으므로 cnt * 10라고 넘겨주면 안되고, 이 연산의 결과를 문자열로 바꾸어서 넘겨주어야 합니다.
// 정수를 문자열로 바꾸는 가장 간단한 방법은 + 연산자를 이용해서 문자열과 연결하는 것입니다.
// 그래서 cnt * 10 + ""라고 쓴 것입니다.
// 두번째 파라미터와 세번째 파라미터는 문자열을 출력할 위치의 X좌표와 Y좌표입니다.
// 그런데 10, 20, 30 ~ 100이라는 숫자는 [그림 19-22]에서 볼 수 있는 것처럼 Y 축 오른쪽에 아래에서부터 위쪽으로 순서대로
// 나란히 써야 합니다. 그래서 X 좌표에 해당하는 값은 25라는 상수로 썼고, Y 좌표에 해당하는 값은
// 255 - 20 * cnt라고 썼습니다.
// 이 메서드의 각 파라미터에 대한 더 자세한 설명은 Graphics 클래스의 API 규격서를 참고하십시오.
// 링크 : http://download.oracle.com/javase/6/docs/api/java/awt/Graphics.html
g.drawLine(50, 250 - 20 * cnt, 350, 250 - 20 * cnt); // 이 라인의 코드 의미좀 가르쳐주세요
// 이 명령문은 [그림 19-22]에 있는 그래프의 10개의 수평선(X 축과 10, 20, 30 ... 100에 해당하는 수평선)을 그리는 역할을 합니다.
// 첫번째와 두번째 파라미터는 선분의 시작 위치를 표시하는 X좌표와 Y좌표이고,
// 세번째와 네번째 파라미터는 선분의 끝 위치를 표시하는 X좌표와 Y좌표입니다.
// 수평선을 그리려면 Y 좌표가 같고 X 좌표만 달라야 합니다.
// 그래서 시작 위치와 끝 위치의 Y 좌표는 둘 다 250 - 20 * cnt이고,
// X 좌표는 50과 350으로 서로 다른 것입니다.
// cnt 변수를 이용해서 Y좌표의 값을 계산한 이유는 루프를 돌 때마다 다른 높이의 위치에 수평선을 그리기 위해서이고요.
// 이 메서드의 각 파라미터에 대한 더 자세한 설명은 Graphics 클래스의 API 규격서를 참고하십시오.
// 링크 : http://download.oracle.com/javase/6/docs/api/java/awt/Graphics.html
}
g.drawLine(50, 20, 50, 250);
g.drawString("국어", 100, 270);
g.drawString("영어", 200, 270);
g.drawString("수학", 300, 270);
g.setColor(Color.RED);
if(korean > 0)
g.fillRect(110, 250 - korean * 2, 10, korean * 2); // 이 라인의 코드 의미좀 가르쳐주세요
// 이 명령문은 [그림 19-22]의 오른쪽에 있는 그래프의 3개의 막대 중 국어에 해당하는 막대를 그리는 역할을 합니다.
// 막대는 속을 채운 직사각형 형태이므로 속을 채운 직사각형을 그리는 fillRect 메서드를 사용했습니다.
// 첫번째와 두번째 파라미터는 직사각형 좌측 상단의 꼭지점 위치를 표시하는 X좌표와 Y좌표이고,
// 세번째와 네번째 파라미터는 각각 직사각형의 넓이와 높이를 표시하는 값입니다.
// 국어 점수에 해당하는 막대의 X 좌표는 정해져 있으므로 첫번째 파라미터의 값은 110이라는 상수로 썼습니다.
// 막대 폭은 항상 일정하게 표시되어야 하므로 세번째 파라미터의 값은 10이라는 상수로 썼습니다.
// 직사각형의 높이는 국어 점수를 표시하므로 두번째와 네번째 파라미터는 국어 점수에 해당하는 korean이라는 변수 값을 가지고 계산했습니다.
// 이 메서드의 각 파라미터에 대한 더 자세한 설명은 Graphics 클래스의 API 규격서를 참고하십시오.
// 링크 : http://download.oracle.com/javase/6/docs/api/java/awt/Graphics.html
if(english > 0)
g.fillRect(210, 250 - english * 2, 10, english * 2); // 이 라인의 코드 의미좀 가르쳐주세요
// 이 명령문은 [그림 19-22]의 오른쪽에 있는 그래프의 3개의 막대 중 영어에 해당하는 막대를 그리는 역할을 합니다.
// 위 설명과 마찬가지이며 영어 점수에 해당하는 english라는 변수를 사용한 것만 다릅니다.
if(math > 0)
g.fillRect(310, 250 - math * 2, 10, math * 2); // 이 라인의 코드 의미좀 가르쳐주세요
// 이 명령문은 [그림 19-22]의 오른쪽에 있는 그래프의 3개의 막대 중 수학에 해당하는 막대를 그리는 역할을 합니다.
// 위 설명과 마찬가지이며 영어 점수에 해당하는 math라는 변수를 사용한 것만 다릅니다.
}
void setScores(int korean, int english, int math)
{
this.korean = korean;
this.english = english;
this.math = math;
}
}
2번
package GUI_programming;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import javax.swing.JPanel;
class ImagePanel extends JPanel
{
Image image;
Toolkit toolkit = getToolkit();
void setPath(String path)
{
image = toolkit.getImage(path);
}
public void paint(Graphics g)
{
g.clearRect(0, 0, getWidth(), getHeight());
if(image != null)
g.drawImage(image, 0, 0, this); // this = ImagePanel 클래스를 의미하는거 맞나요?
// 정확히 말하면 his=ImagePanel 클래스의 객체입니다.
}
}
3번
// AppletDatabase.java 파일
import java.awt.BorderLayout;
import java.awt.Container;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
public class AppletDatabase extends JApplet
{
public void init()
{
Container container = getContentPane();
JPanel jpanel = new JPanel();
JTextField jtextfield = new JTextField(30);
JButton jbutton = new JButton("검색");
jpanel.add(new JLabel("상품명"));
jpanel.add(jtextfield);
jpanel.add(jbutton);
container.add(jpanel, BorderLayout.NORTH);
String columnNames[] = {"상품코드", "상품명", "단가", "제조사"};
DefaultTableModel defaulttablemodel = new DefaultTableModel(columnNames, 0);
JTable jtable = new JTable(defaulttablemodel);
container.add(new JScrollPane(jtable), BorderLayout.CENTER);
jbutton.addActionListener(new SearchActionListener(jtable, jtextfield));
}
}
// SearchActionListener.java 파일
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
class SearchActionListener implements ActionListener
{
JTable jtable;
JTextField jtextfield;
SearchActionListener(JTable jtable, JTextField jtextfield)
{
this.jtable = jtable;
this.jtextfield = jtextfield;
}
public void actionPerformed(ActionEvent ae)
{
String name = jtextfield.getText();
DefaultTableModel defaulttablemodel = (DefaultTableModel)jtable.getModel();
defaulttablemodel.setRowCount(0);
Connection conn = null;
Statement stmt = null;
try
{
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/malldb", "root", "1234");
stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from goodsinfo where " + "name like \" + name + "%;");
while(rs.next())
{
String array[] = new String[4];
array[0] = rs.getString("code");
array[1] = rs.getString("name");
array[2] = rs.getString("price");
array[3] = rs.getString("maker");
defaulttablemodel.addRow(array);
}
}
catch(ClassNotFoundException cnfe)
{
showErrorMessage("해당 클래스를 찾을 수 없습니다." + cnfe.getMessage());
}
catch(SQLException se)
{
showErrorMessage("데이터베이스 에러입니다.");
}
/*
catch(java.io.UnsupportedEncodingException uee)
{
showErrorMessage("지원되지 않는 문자셋입니다.");
}
*/
finally
{
try
{
stmt.close();
}
catch(Exception ignored)
{
}
try
{
conn.close();
}
catch(Exception ignored)
{
}
}
}
private void showErrorMessage(String str)
{
JOptionPane.showMessageDialog(jtextfield, str, "에러 메시지", JOptionPane.ERROR_MESSAGE);
}
}
// productinformationsearch.html 파일
상품 정보 검색
상품 정보 검색 프로그램
Copyright ⓒ 2006 Dukes Mall All rights reserved
// mysql 관련 내용들
mysqladmin -u root -p create malldb
1234
mysql -u root -p
1234
show databases;
use malldb;
// goodsinfo table 관련 내용들
create table goodsinfo
(
code char(5) not null,
name varchar(30) not null,
price int(8) not null,
maker varchar(20),
primary key(code)
);
insert into goodsinfo(code, name, price, maker)
values(10001, 디지털 TV, 350000, LG);
insert into goodsinfo(code, name, price, maker)
values(10002, DVD 플레이어, 250000, LG);
insert into goodsinfo(code, name, price, maker)
values(10003, 디지털 카메라, 210000, 삼성);
insert into goodsinfo(code, name, price, maker)
values(10004, 전자사전, 180000, 아이리버);
insert into goodsinfo(code, name, price, maker)
values(10005, 벽걸이 에어컨, 400000, 삼성);
update goodsinfo
set name = 컬러 전자사전, price = 300000
where code = 10004;
delete
from goodsinfo
where code = 10005;
C:\Program Files\Java\jdk1.6.0_18\jre\lib\ext 폴더에 mysql-connector-java-5.0.0-beta-bin.jar 파일 붙여넣었습니다.
http://localhost/appletdatabase/productinformationsearch.html 실행해서 텍스트필드에 디지털 적고 검색버튼 클릭하면
에러 메시지
해당 클래스를 찾을 수 없습니다.com.mysql.jdbc.Driver
확인버튼
이렇게 뜹니다.
해결방법을 모르겠습니다. 답변좀 주세요 ...
// 인터넷 익스플로러가 애플릿을 실행할 때 사용하는 것은 JDK가 아니라 JRE입니다.
// JRE란 자바 프로그램을 컴파일할 수는 없지만 실행은 할 수 있는 소프트웨어이며 JDK를 설치할 때 기본적으로 함께 설치됩니다. (p.25의 6번 참고)
//
// 그런데 애플릿처럼 JRE를 통해 실행되는 자바 프로그램에 데이터베이스를 사용하는 코드가 있을 때는
// JDK 디렉터리 아래의 jre\lib\ext 디렉터리가 아니라 JRE 디렉터리 아래의 lib\ext 디렉터리에 mysql-connector-java-5.0..0-beta-bin.jar 파일이 있어야 합니다.
//
// 그 디렉터리에 mysql-connector-java-5.0.0-beta-bin.jar 파일을 설치하는 방법은
// p.834의 [그림 21-14]에 나와 있지만, JDK의 버전이 바뀌면서 JRE 디렉터리의 경로명이 그림과 다르게 바뀌었습니다.
//
// 새로운 JRE 디렉터리의 정확한 경로명은 JDK를 설치할 때 화면에 표시되지만, 그 경로명이 기억나지 않는다면
// C:\Program Files\Java 디렉터리로 가서 JRE로 시작하는 이름의 디렉터리가 있는지 찾아보십시오.
//
// 그 디렉터리 아래의 lib\ext 서브디렉터리에 mysql-connector-java-5.0.0-beta-bin.jar 파일을 복사하면 됩니다.
//
// 그리고 나서 이 예제를 실행할 때는 새로운 웹 브라우저를 연 다음에 실행해야 에러 없이 실행될 것입니다.
4번 애플릿 프로그래밍 이클립스에서 실행 못하나요 ...
// 실행할 수 있습니다.
// 하지만 이 때는 이클립스의 Run 메뉴를 이용하지 말고, Run as Java Applet 메뉴를 이용해서 실행해야 합니다.
// 그렇게 하면 인터넷 익스플로러가 아니라 애플릿 뷰어라는 프로그램을 통해 애플릿이 실행됩니다.
// 이것은 웹 브라우저와 같은 풍부한 기능이 있는 프로그램이 아니라 단지 애플릿 테스트 용으로 사용되는 프로그램인데
// 초기에 창이 아주 작게 뜨므로 마우스로 드래그해서 화면을 키운 후에 테스트하십시오.
// 책에 있는 예제는 이클립스으로 실행되어서 데이터베이스의 데이터까지 읽어오는 것을 확인했습니다.
//
// 하지만 위에 있는 예제는 아직 완성하신 것이 아닌가 봅니다.
// 화면이 뜨고, 검색 버튼을 눌렀을 때 에러가 나지 않는 것까지는 확인했습니다.
// 하지만 데이터를 읽어오지는 못했습니다. 그 부분까지는 구현하지 않으셨나 봅니다.
//
// 테스트해보시고 나서 더 궁금한 점 있으면 다시 메일 주십시오.