한글 혼합형 차트 만들기
마우스 왼쪽버튼 클릭후 오른쪽 버튼을 눌러 이미지를 저장하세요.
이미지를 저장 후 보시면 크게 볼 수 있습니다.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.EtchedBorder;
import javax.swing.border.TitledBorder;
import javax.xml.crypto.Data;
import java.io.*;
import java.lang.reflect.Array;
import java.awt.CheckboxMenuItem;
import java.util.Calendar;
import java.awt.Font;
public class NotePad2Frame extends JFrame //implements TextListener
{
private ActionListener listener;
private TextListener txlistener;
private Font font;
JMenuBar bar;
JMenuItem NPrint,NClock,NFile,NEdit,NTool,NSave,NHelp,NExit,NFind,NChange,HTML,Def;
private Dialog d,dl;
private FileDialog fd;
private JTextPane Area;
private JLabel label;
private JPanel panel;
String str = "새문서";
String facename = "bold";
public NotePad2Frame()
{
bar = new JMenuBar();
JMenu file = new JMenu("FILE");
NFile = new JMenuItem("새문서");
NFile.setAccelerator(KeyStroke.getKeyStroke('N',Event.CTRL_MASK));
NFile.addActionListener(listener);
NEdit = new JMenuItem("불러오기");
NEdit.setAccelerator(KeyStroke.getKeyStroke('O',Event.CTRL_MASK));
NEdit.addActionListener(listener);
NTool = new JMenuItem("저장하기");
NTool.addActionListener(listener);
NTool.setAccelerator(KeyStroke.getKeyStroke('S',Event.CTRL_MASK));
JMenuItem NSave = new JMenuItem("다른이름으로저장");
NSave.addActionListener(listener);
NSave.setAccelerator(KeyStroke.getKeyStroke('A',Event.CTRL_MASK));
JMenuItem NPrint = new JMenuItem("인쇄");
NPrint.addActionListener(listener);
NPrint.setAccelerator(KeyStroke.getKeyStroke('P',Event.CTRL_MASK));
JMenuItem NExit = new JMenuItem("종료");
NExit.setAccelerator(KeyStroke.getKeyStroke('X',Event.CTRL_MASK));
NExit.addActionListener(listener);
file.add(NFile);
file.add(NEdit);
file.add(NSave);
//file.add(NHelp);
file.add(NPrint);
file.addSeparator();
file.add(NExit);
bar.add(file);
setJMenuBar(bar);
//여기까지 파일메뉴
JMenu edit = new JMenu("EDIT");
JMenuItem NFind = new JMenuItem("찾기");
NFind.setAccelerator(KeyStroke.getKeyStroke('F',Event.CTRL_MASK));
NFind.addActionListener(listener);
JMenuItem NChange = new JMenuItem("바꾸기");
NChange.setAccelerator(KeyStroke.getKeyStroke('W',Event.CTRL_MASK));
NChange.addActionListener(listener);
JMenuItem NSelectAll = new JMenuItem("모두선택");
NSelectAll.setAccelerator(KeyStroke.getKeyStroke('A',Event.CTRL_MASK));
NSelectAll.addActionListener(listener);
JMenuItem NClock = new JMenuItem("시간/날짜");
NClock.setAccelerator(KeyStroke.getKeyStroke("F5"));
edit.add(NFind);
edit.add(NChange);
edit.add(NSelectAll);
edit.add(NClock);
bar.add(edit);
setJMenuBar(bar);
//여기까지 Edit메뉴
JMenu Formula = new JMenu("FORMULA");
JMenuItem LineChange = new JMenuItem("자동 줄 바꿈");
LineChange.setAccelerator(KeyStroke.getKeyStroke('H',Event.ALT_MASK));
LineChange.addActionListener(listener);
JMenuItem NFont = new JMenuItem("글 꼴");
NFont.setAccelerator(KeyStroke.getKeyStroke('F',Event.ALT_MASK));
NFont.addActionListener(listener);
Formula.add(LineChange);
Formula.add(NFont);
bar.add(Formula);
setJMenuBar(bar);
//여기까지 서식(Formula)메뉴
JMenu Tool = new JMenu("TOOL");
JMenuItem HTML = new JMenuItem("html");
JMenuItem Def = new JMenuItem("사용자정의");
Def.addActionListener(listener);
Tool.add(HTML);
Tool.add(Def);
bar.add(Tool);
setJMenuBar(bar);
//여기까지 속성메뉴
setLayout(new BorderLayout());
Area = new JTextPane();
//Area.addTextListener(txlistener);
Area.setCaretColor(Color.blue);
Area.setSelectedTextColor(Color.green);
Area.setSelectionColor(Color.BLUE);
Area.setBackground(Color.green);
Area.setFont(new Font(null,font.ITALIC,15));
//Font클래스는 import를 할경우 선언을 안하고 사용이 가능하지만 Font의 static변수는
//전역변수로 꼭!! 선언을 하고 사용한다.!!!!!!!!!!!!!!!!!
add("Center",Area);
setVisible(true);
NFile.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
Area.setText("");
}
});
NEdit.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
fd = new FileDialog(NotePad2Frame.this, "OPEN",FileDialog.LOAD); //LOAD대신 SAVE를 쓰면 저장하기다이얼로그
fd.setSize(300,200); //윈2000에서 다이얼로그 창이 빨리 사라지면 제목을 영어로 써주면됨.
fd.setVisible(true);
fd.getFile(); //파일명 알아내기
fd.getDirectory();//파일 경로알아내기
try{
FileReader fr = new FileReader(fd.getDirectory()+fd.getFile());
BufferedReader br = new BufferedReader(fr);
Area.setText("");
for(String str; (str = br.readLine()) != null;)
{
Area.setText(str + "\n");
}
br.close();
String fileName1 = fd.getFile(); //제목줄에 파일이름 붙이기;
setTitle(fileName1);
}catch(Exception ex){
JOptionPane.showMessageDialog(null, ex.getMessage());
}
}
});
/* NTool.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
if()
}
});*/
NSave.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
fd = new FileDialog(NotePad2Frame.this, "OPEN",FileDialog.LOAD); //LOAD대신 SAVE를 쓰면 저장하기다이얼로그
fd.setSize(300,200); //윈2000에서 다이얼로그 창이 빨리 사라지면 제목을 영어로 써주면됨.
fd.setVisible(true);
fd.getFile(); //파일명 알아내기
fd.getDirectory();//파일 경로알아내기
try{
FileWriter fw = new FileWriter(fd.getDirectory()+fd.getFile());
BufferedWriter bw = new BufferedWriter(fw);
bw.write(Area.getText());
String filename1 = fd.getFile();
setTitle(filename1);
}catch(Exception ex)
{JOptionPane.showMessageDialog(null, ex.getMessage());}
}
});
NPrint.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
PrintJob pj;
//pj = Toolkit.getDefaultToolkit().getPrintJob(this, "hi", null);
}
});
NPrint.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
try
{
Area.print();
}
catch (Exception ex){}
}
});
NExit.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
JFrame fr = new JFrame();
JLabel lb = new JLabel("종료하시겠습니까");
//
JPanel pn = new JPanel();
JButton button1 = new JButton("YES?");
button1.addActionListener(listener);
JButton button2 = new JButton("NO?");
button2.addActionListener(listener);
pn.add(button1);
pn.add(button2);
//
fr.add(lb,BorderLayout.NORTH);
fr.add(pn,BorderLayout.CENTER);
fr.setSize(200,100);
fr.setVisible(true);
fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
});
//여기까지 파일메뉴
NFind.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
JFrame f = new JFrame();
f.setVisible(true);
f.setSize(400,200);
f.setDefaultCloseOperation(EXIT_ON_CLOSE);
JPanel pn = new JPanel();
JLabel lb = new JLabel("찾을내용");
final JTextField jd = new JTextField(15);
JButton button1 = new JButton("다음찾기");
button1.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
//String fieldString = jd.getText();
//String textstring = Area.getText();
//if(textstring.indexOf(fieldString)!=-1)
//{
//}
if(Area.getText().indexOf(jd.getText())!=-1) {
Area.select(Area.getText().indexOf(jd.getText()),Area.getText().indexOf(jd.getText())+jd.getText().length());
}
//select()메서드는 해당블락을 표시해준다!!!
java.awt.Container com = null;
com = ((javax.swing.JButton)e.getSource()).getParent();
//component의 getParent메서드를 이용해서 JFrame(찾기프레임)을 찾습니다.
while(!com.getClass().getSimpleName().equals("JFrame")){
com = com.getParent();
}
javax.swing.JFrame comFrame = (javax.swing.JFrame)com;
//해당 프레임을 닫아줍니다.
comFrame.setVisible(false);
comFrame.dispose();
}
});
pn.add(lb);
pn.add(jd);
pn.add(button1);
add(pn,BorderLayout.NORTH);
//1행
JRadioButton jb = new JRadioButton("위로");
JRadioButton jb2 = new JRadioButton("아래로");
JButton button2 = new JButton("취소");
f.add(pn);
}
});
NChange.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
JFrame f = new JFrame("바꾸기");
f.setVisible(true);
f.setSize(400,150);
f.setDefaultCloseOperation(EXIT_ON_CLOSE);
JPanel pn = new JPanel();
JPanel pn2 = new JPanel();
JButton bt = new JButton("바꾸기");
JLabel lb1 = new JLabel("찾을 내용");
JLabel lb2 = new JLabel("바꿀 내용");
final JTextField jd = new JTextField(15);
final JTextField jd2 = new JTextField(15);
pn.add(lb1);
pn.add(jd);
pn.add(bt);
f.add(pn,BorderLayout.NORTH);
pn2.add(lb2);
pn2.add(jd2);
f.add(pn2,BorderLayout.CENTER);
bt.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
String s = jd.getText();
String s2 = jd2.getText();
//indexOf() 꼭 기억하자!!!! replaceAll()마찬가지!!!
if(Area.getText().indexOf(s)!=-1){
Area.setText(Area.getText().replaceAll(s, s2));
}
}
});
}
});
NSelectAll.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
Area.selectAll();
}
});
NClock.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
Calendar cal = Calendar.getInstance();
//현재시각을 사용하기 위하여 getInstance()메서드 사용!!!!
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH);
int day= cal.get(Calendar.DAY_OF_MONTH);
int hour = cal.get(Calendar.HOUR);
int minutes = cal.get(Calendar.MINUTE);
int second = cal.get(Calendar.SECOND);
Area.setText(Area.getText()+year+"년"+month+"월"+day+"일"+hour+"시"
+minutes+"분"+second+"초");
}
});
//여기까지 EDIT메뉴~~
LineChange.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
int j=JOptionPane.showConfirmDialog(null,"자동줄바꿈을 설정하시겠습니까?"
,"자동줄 바꿈",JOptionPane.YES_NO_OPTION);
if(j!=0)
{
//
}
}
});
NFont.addActionListener(new ActionListener()
{
int fontstyle;
int size = 15;
String o;
String t;
JLabel lb;
public void actionPerformed(ActionEvent e)
{
JFrame frame = new JFrame("글 꼴");
/*JPanel pn1 = new JPanel();
JComboBox box1 = new JComboBox();
box1.addItem("궁서체");
box1.addItem("굴림체");
box1.addItem("고딕체");
*/
JPanel pn2= new JPanel();
///////////////////수정1/////////////////////////
////////////////////////////////////////////////
////////////////////////////////////////////////
//final를 추가하세요. 님이 만든 소스를 사용하다보니...
final JComboBox box2 = new JComboBox();
box2.addItem("bold");
box2.addItem("italic");
box2.addItem("type_1");
box2.addItem("truetype");
JPanel pn3 = new JPanel();
final JTextField box3 = new JTextField(10); //JTextField를 final로 선언한다!!
//box1.setEditable(true);
box2.setEditable(true);
box3.setEditable(true);
//pn1.add(box1);
pn2.add(box2);
pn3.add(box3);
//pn1.setBorder(new TitledBorder(new EtchedBorder(Color.BLUE,Color.DARK_GRAY),"글 꼴"));
pn2.setBorder(new TitledBorder(new EtchedBorder(Color.BLUE,Color.DARK_GRAY),"글꼴 스타일"));
pn3.setBorder(new TitledBorder(new EtchedBorder(Color.BLUE,Color.DARK_GRAY),"크 기"));
frame.setLayout(new GridLayout(2,1));
//frame.add(pn1);
frame.add(pn2);
frame.add(pn3);
JPanel pn4 = new JPanel();
lb = new JLabel("ABCDEF");
pn4.add(lb);
pn4.setBorder(new TitledBorder(new EtchedBorder(Color.BLUE,Color.DARK_GRAY),"미리보기"));
frame.add(pn4);
frame.setSize(400,300);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//////////////////////////////////////////// 요 부 분 !!!!!!!!!!! ///////////////////////////////
box2.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
/*
이부분 삭제하세요
o = e.getActionCommand();
if (o=="bold") {fontstyle = font.BOLD;}
else if(o=="italic"){fontstyle = font.ITALIC;}
else if(o=="type_1"){fontstyle = font.TYPE1_FONT;}
else if(o=="truetype"){fontstyle = font.TRUETYPE_FONT;}
*/
///////////////////////수정2/////////////////////
////////////////////////////////////////////////
////////////////////////////////////////////////
// 이부분 추가하세요
if(e.getSource() == box2){
JComboBox cb = (JComboBox)e.getSource();
// cb.getSelectedIndex() 이것이 0,1,2.. 값을 리턴합니다.
// 의문점 쪽지주세요
switch (cb.getSelectedIndex()) {
case 0:
fontstyle = font.BOLD;
break;
case 1:
fontstyle = font.ITALIC;
break;
case 2:
fontstyle = font.TYPE1_FONT;
break;
case 3:
fontstyle = font.TRUETYPE_FONT;
}
}
setSampleFont();
}
});
box3.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
t = box3.getText();
size = Integer.parseInt(t);
setSampleFont();
}
});
}
public void setSampleFont()
{
lb.setFont(new Font(null,fontstyle,size));
}
});
//여기까지 Formula(서식)메뉴~~
Def.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
JOptionPane.showMessageDialog(null, "2008/10/x 드디어 완성 ㅋㅋㅋ","메모장",JOptionPane.INFORMATION_MESSAGE );
}
});
}
public static void main(String args[])
{
JFrame frame = new NotePad2Frame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setTitle("메모장");
frame.setVisible(true);
frame.setSize(700,500);
}
}
/*문]
* ////////////////////////////// 요 부분 ///////////////
* 이라고 표시된 부분이 글꼴의 폰트를 변경시키는 부분인데요.
* 폰트가 딱 한번만 변경이 되고 다시 변경을 시킬때는 적용이 안되네요 ㅠㅠ
* 예를 들면 폰트를 ITALIC으로 변경을 시키면 변경이 됩니다.
* 하지만 ITALIC을 다시 BOLD로 변경을 시킬려면 적용이 안되네요.
* 왜 그런지 계속 고민을 하는데 잘안되네요.
* 고수님들의 도움좀 부탁드려여~~
*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class GraphicTest extends JFrame implements ActionListener {
JLabel x1L, y1L, x2L, y2L, z1L, z2L;
JTextField x1T, y1T, x2T,y2T,z1T,z2T;
JCheckBox fill;
JRadioButton line, circle, rect, rectR, arc; // 선 원 사각형 둥근사각형 호
JButton draw; // 2개의 패널 생성 위,아래
DrCanvas can;
JComboBox combo;
////////////////////////////////////
//color 추가하세요
Color Color;
public GraphicTest(){
x1L = new JLabel("x1");
y1L = new JLabel("y1");
x2L = new JLabel("x2");
y2L = new JLabel("y2");
z1L = new JLabel("z1");
z2L = new JLabel("z2");
x1T = new JTextField("100",3);
y1T = new JTextField("50",3);
x2T = new JTextField("150",3);
y2T = new JTextField("130",3);
z1T = new JTextField("50",3);
z2T = new JTextField("50",3);
line = new JRadioButton("선");
circle = new JRadioButton("원");
rect = new JRadioButton("사각형",true);
rectR = new JRadioButton("둥근사각형");
arc = new JRadioButton("호");
ButtonGroup bg = new ButtonGroup(); // RadioButton은 항상 그룹으로 묶어줘야된다.
bg.add(line);
bg.add(circle);
bg.add(rect);
bg.add(rectR);
bg.add(arc);
draw = new JButton("그리기");
can = new DrCanvas();
fill = new JCheckBox("채우기", true);
String[] color = {"빨강","파랑","노랑","초록","흰색"};
combo = new JComboBox(color);
JPanel p = new JPanel();
p.add(x1L);
p.add(x1T);
p.add(y1L);
p.add(y1T);
p.add(x2L);
p.add(x2T);
p.add(y2L);
p.add(y2T);
p.add(z1L);
p.add(z1T);
p.add(z2L);
p.add(z2T);
p.add(fill);
JPanel p2 = new JPanel();
p2.add(line);
p2.add(circle);
p2.add(rect);
p2.add(rectR);
p2.add(arc);
p2.add(combo);
p2.add(draw);
this.add("South",p2);
this.add("North",p);
this.add("Center",can);
setSize(600,300);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
//이벤트 처리
draw.addActionListener(this);
combo.addActionListener(this);
} // GraphicTest()
public void actionPerformed(ActionEvent e) {
////////////////////////////////////////////
// 이부분 추가하세요
if(e.getSource() == combo){
JComboBox cb = (JComboBox)e.getSource();
// cb.getSelectedIndex() 이것이 0,1,2.. 값을 리턴합니다.
// 의문점 쪽지주세요
switch (cb.getSelectedIndex()) {
case 0:
Color=Color.red;
break;
case 1:
Color=Color.blue;
break;
case 2:
Color=Color.yellow;
break;
case 3:
Color=Color.GREEN;
break;
case 4:
Color=Color.white;
}
}
can.repaint();
}// ActionEvent
class DrCanvas extends Canvas{
public DrCanvas(){
this.setBackground(new Color(140,60,80)); // 캔버스 색
this.setForeground(new Color(255,255,255)); // 도형 색상
} //DrCanvas()
public void paint(Graphics g){
//좌표 얻어오기
int x1 = Integer.parseInt(x1T.getText().trim());
int y1 = Integer.parseInt(y1T.getText().trim());
int x2 = Integer.parseInt(x2T.getText().trim());
int y2 = Integer.parseInt(y2T.getText().trim());
int z1 = Integer.parseInt(z1T.getText().trim());
int z2 = Integer.parseInt(z2T.getText().trim());
System.out.println();
System.out.println("그리기 시작" );
// 도형 그리자
if(fill.isSelected() ) { // 채우기 선택
/////////////////////////////////////////////
// 이부분 추가하세요
g.setColor(Color);
if( line.isSelected() )
g.drawLine(x1,y1,x2,y2);
else if( circle.isSelected() )
g.fillOval(x1,y1,x2,y2);
else if( rect.isSelected() )
g.fillRect(x1,y1,x2,y2);
else if( rectR.isSelected() )
g.fillRoundRect(x1,y1,x2,y2,z1,z2);
else if( arc.isSelected() )
g.fillArc(x1,y1,x2,y2,z1,z2);
} // if
else { // 채우기 해제
if(line.isSelected() ) {
g.drawLine(x1,y1,x2,y2);
} else if(circle.isSelected() ) {
g.drawOval(x1,y1,x2,y2);
} else if(rect.isSelected() ) {
g.drawRect(x1,y1,x2,y2);
} else if(rectR.isSelected() ) {
g.drawRoundRect(x1,y1,x2,y2,z1,z2);
} else if(arc.isSelected() ) {
g.drawArc(x1,y1,x2,y2,z1,z2);
}
} // else
} // paint()
} // DrCanvas()
public static void main(String[] args) {
new GraphicTest();
}
}
/*
문]
String[] color = {"빨강","파랑","노랑","초록","흰색"};
combo = new JComboBox(color);
이렇게 넣어놓으면 선택된 박스의 값을 어떻게 가져오나요...
System.out.println(combo) 라고 하니까 아주 긴 여러가지가
저기 빨강이 color[0] 이자나용 그럼 이 0 을 가져오고싶습니다...
*/
public class Mabangjin
{
public static void main(String args[])
{
//배열을 6으로 만드세요
//님이 사용한 로직은 5를 사용했는데
//그러면 0,1,2,3,4 이런식으로 첨자가 사용 되어야합니다.
//하지만 이 프로그램에서는 5까지 사용하니 6으로 해야
//에러가 발생하지 않습니다.
//의문점 쪽지 주세요
int a[][] = new int[6][6];
int i=1;
int j=(5/2)+1;
for(int k=1;k<=25;k++)
{
System.out.println("i="+i+"j="+j);
a[i][j]=k;
if(k%5==0)
{
i=i+1;
}
else
{
i=i-1;
j=j+1;
}
if(i<1)
{
i=5;
}
else if(j>5)
{
j=1;
}
}
//여기도 수정 x y 값수정
for (int x = 1; x < 6; x++)
{
for (int y = 1; y< 6; y++)
{
//출력을 보기 좋게
System.out.printf("%3d",a[x][y]);
}
System.out.println();
}
}
}
//문]
//a[i][j]=k;에서 배열의 범위를 벗어났다고하네요
//제가 봤을때는 이상없는것 같은데 ㅜ.ㅜ
//고수님들 좀 봐주세요 실행화면도 같이 해주시면 좋고요
//부탁드립니다 밑에는 소스입니다
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.Timer;
public class Main extends Applet implements ActionListener, Runnable {
Font f;
Image img;
Button btn_start;
Button btn_stop;
int col=10;
int row=10;
Random mole_random;
Thread thread;
//Timer timer1;
public void init(){
f= new Font("SansSerif", Font.TYPE1_FONT, 15);
//img = getImage(getDocumentBase(), "mogu4.png");
//저의 android.jpg로 사용 님그림으로 바꾸세요.
img = getImage(getDocumentBase(), "android.jpg");
btn_start = new Button("시작");
btn_start.addActionListener(this);
add(btn_start);
btn_stop = new Button("중단");
btn_stop.addActionListener(this);
btn_stop.setEnabled(false);
add(btn_stop);
}
// 필요 없음
// public void start(){
// repaint();
// // timer1.start();
//
// }
public void run(){
// 가장 문제가 있는 부분 for를 사용하면 안됩니다.
// for(int i=0; i<100; i++)
// {
while(true){
mole_random = new Random();
col=mole_random.nextInt(370)+10;
row=mole_random.nextInt(470)+10;
//g.drawImage(img, col, row, this);
repaint();
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// }
}
//필요없음
// public void stop(){
// thread=null;
// }
public void paint(Graphics g){
g.drawRect(2, 2, 400, 500);
g.drawImage(img, col, row, this);
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==btn_start){
btn_stop.setEnabled(true);
thread = new Thread(this);
thread.start();
repaint();
}
if(e.getSource()==btn_stop){
btn_start.setEnabled(true);
btn_stop.setEnabled(false);
//이부분 추가
thread.stop();
}
}
}
//문]
//버튼을 누르면 그림이 무작위로 나타나는 것이 목적인데, 다음과 같이 하면 버튼을 누를때 마다 한번씩만 실행됩니다. 도와주세여