JAVA APPLET 질문드립니다.
2013.01.23 22:20
질문하시기 전에 게시판 검색을 먼저 해주세요.
타블릿PC, 스마트폰에 관한 질문 또는 요청은 <포터블기기 질문답변> 게시판을 이용해주세요.
========================================0=====================================================
현재 APPLET 부분을 공부하다가 PENEL 부분을 가지고 만드는 부분에서 해깔려 질문 드립니다.
-------------------------------------------------예제_----------------------------------------
import java.applet.Applet;
import java.awt.*;
import java.awt.event.ActionListener;
class PanelTest extends Applet implements ActionListener{
public static void main(String args[]){
Frame f = new Frame("Panel");
f.setSize(900,500);
Panel p1 = new Panel();
Panel p2 = new Panel();
Panel p3 = new Panel();
Panel p4 = new Panel();
Panel p5 = new Panel();
//Panel의 배경지정.
// p2.setSize(양뱡향,높이);
p1.setBackground(Color.red);
// p1.setSize(900,10);
//p1.setLocation(10,10);
p3.setBackground(Color.BLACK);
//p3.setSize(900,80);
//p3.setLocation(10,200);
p2.setBackground(Color.gray);
//p2.setSize(900,150);
//p2.setLocation(10,80);
p4.setBackground(Color.green);
// p4.setSize(900,35);
// p4.setLocation(10,240);
p5.setBackground(Color.blue);
// p5.setSize(900,35);
//p5.setLocation(10,280);
Button bt1 = new Button("Connect");
Button bt2 = new Button("DisConnect");
Button bt3 = new Button("Send");
Label sever = new Label("sever");
Label port = new Label("PortNo");
Label aId = new Label("대 화 명");
Label message = new Label("Message");
TextField local = new TextField("LocalHost");
TextField bport = new TextField("1234");
TextField bId = new TextField("손님");
TextField bmessage = new TextField("메시지 입력");
TextArea area = new TextArea();
area = new TextArea("Message",8,110);
local=new TextField(null,20);
bport=new TextField(null,3);
bId=new TextField(null,14);
bmessage = new TextField(null,60);
p2.setLayout(new BorderLayout() );
p3.setLayout(new BorderLayout() );
p2.add(area);
p3.add("North",p4);
p3.add("Center",p5);
p4.add(sever);
p4.add(local);
p4.add(port);
p4.add(bport);
p4.add(aId);
p4.add(bId);
p4.add(bt1);
p4.add(bt2);
p5.add(message);
p5.add(bmessage);
p5.add(bt3);
//Panel을 Frame에 포함시킨다.
f.add("North",p1);
f.add("Center",p2);
f.add("South",p3);
//f.add(p5);
f.setVisible(true);
}
}
------------------------------
저위 코드를 가지고 APPLET 로 변환 할려면 어찌 해야 하나요? 예제 코드를 부탁 드려 봅니다 ...
코멘트 7
-
김강욱
01.23 23:48
-
일단 저위 예제는 패널로만 만들었습니다
저걸 APPLET 로 변환 해야하는대 해매고 있내요
(이클립스 사용중입니다.)
실행시 애플릿 이라고 떠게 만들어야 하는대 먼가 어렵내요 ;;;
-
Panel은 UI 요소일뿐이고, Applet은 컴파일된 실행파일의 종류중 하나라서, 매치되는 개념이 아닙니다. 아마 뭔가 시작부터 잘못 공부하신거 같네요. 다시 한번 책을 처음부터 보시길 권장합니다.
그런데 아직도 awt를 쓰나요? JAVA가 awt에 목매달고 있다가는 영원히 데스크탑 시장에서는 이 모냥 이꼴일텐데요...
-
넵 이걸 살며을 어찌할지 멀라서요 ㅎㅎ
-
purity
01.24 10:19
간단하게 설명드리려 했으나... 약간 길어질 수도...
- 일단 10여분만에 만든 날림 예제를 보시지오.
import java.applet.Applet;
import java.awt.BorderLayout;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.SwingUtilities;
import java.awt.Container;
import java.awt.event.ActionEvent;
/**
* applet test for edu.
*
* please refer these :
*
* applet javadoc : http://docs.oracle.com/javase/1.4.2/docs/api/java/applet/Applet.html
* oracle applet lesson : http://docs.oracle.com/javase/tutorial/deployment/applet/index.html
*
* @author purity
*
*/
public class TestApplet extends Applet {
/**
*
*/
private static final long serialVersionUID = 1L;
private Container _container;
@Override
public void init() {
_container = this;
}
@Override
public void start() {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
_container.setLayout(new BorderLayout());
_container.add(new JButton(new TestAction(1, "North")), BorderLayout.NORTH);
_container.add(new JButton(new TestAction(2, "South")), BorderLayout.SOUTH);
_container.add(new JButton(new TestAction(3, "East")), BorderLayout.EAST);
_container.add(new JButton(new TestAction(4, "West")), BorderLayout.WEST);
_container.add(new JButton(new TestAction(5, "Center")), BorderLayout.CENTER);
}
});
}
@Override
public void stop() {
// None
}
@Override
public void destroy() {
// None
}
private class TestAction extends AbstractAction {
private static final long serialVersionUID = 1L;
private int key;
public TestAction(int key, String name) {
this.key = key;
putValue(Action.NAME, name);
}
@Override
public void actionPerformed(ActionEvent e) {
branch(key, e);
}
}
private void branch(int key, ActionEvent e) {
String msg = String.format("You clicked the %s key, Internal code of key is %d", ((JButton) e.getSource()).getText(), key);
System.out.println(msg);
}
}
1) 생소한 것들이 있을 수 있으나 일단은 넘기시고 중요한 것은 Applet은 이를 실행하기 위해서 초기화, 시작, 중지, 생명주기 종료 등의 메소드를 오버라이딩해야만 합니다. 상기에 보시면 init(), start(), stop(), destroy() 들이 그것입니다. 애플릿은 실행되면 init() -> start() 순으로 메소드를 타고(?), 종료시는 stop() -> destroy() 순입니다. static void main은 애플릿의 스타트 메소드로 사용되지 않습니다.2) 어차피 AWT와 Swing의 Mixed 코딩을 할 수 밖에 없으니 간편하게 JApplet을 상속 받으시는 것이 더욱 좋을 수 있습니다. 이 둘의 차이점은 웹에서 찾아보시면 될 것 같고...3) GUI 프로그래밍은 최상위 EventDispatch 스레드로부터 관리(?) 당하게 되어야 합니다. GUI라는게 결국 복잡한 스레드들의 동시 다발적인 실행과 이벤트 핸들링이니까요. Swing에서는 이의 편리함을 제공하기 위하여 SwingUtilities라는 static 클래스를 제공합니다. 위의 코드를 보시고 역시 검색을~4) 부득하게 각각의 컴포넌트에 이벤트 리스너를 할당해야 할 때도 있습니다만, 좀더 효과적인 방법은 Action 클래스를 사용하는 것입니다. 본문을 참조하세요.5) midday님 말씀에 동의하며 UI의 개념을 다시 잡으셔야 할 것 같습니다. Frame은 UI 컴포넌트이며(일반적으로 이는 예하 컴포넌트의 root가 되지요), 애플릿은 그와 같은 최상위(정확히 바로 아래 정도?) UI 컴포넌트입니다. 따라서 애플릿에서 Frame을 여는 개념이 아닙니다. 죄송한 표현이나... 이 둘의 차이가 혼동되신다는 것은 UI에 대한 근본적 이해 자체가 부족하시다는 반증이기도 합니다.6) 소스상의 클래스 주석에 표기된 2개 웹 사이트를 참조하세요. 특히 자바에 있어서는 아무리 검색이고 뭐고 해도 기본중에 기본은 javadoc을 파는 겁니다. stackoverflow라는 개발자 질답 사이트와 javadoc만 있으면 뭐... 먹고 살기는 충분하다고도...;;;날림 소스이고 실력이 일천한지라 부족한 설명인 것에 양해를 다시금 드리면서 마칩니다. 더불어 애플릿도 좋습니다만, 조금더 멀리, 그리고 많이 찾는 방안으로 이후에 연계하여 SWT, Eclipse Plug-in 등에도 도전해보시면 좋을 것 같습니다. 물론 방법(실은 순서? 이 의미는 해보시면...)이 조금 다르기는 하지만 기본중에 기본으로 자바 그 자체와 UI에 대한 이해가 필요하다는 것은 두말하면 잔소리이겠구요.그럼 이만 총총~ ==333 -
감사합니다 ㅎㅎ 현재 배우고 잇어서 맛보기로 나가는 부분이엿습니다 패널(레이아웃 메니져)부분에서 작성한 예제를 가지고 만들어 보라는 부분에서 이해가 안가서요 ㅎㅎ 쩝 한두달 만지지를 않앗더니 ㅠㅠ
-
우왓;;; 먼가 큰착각을 하고 있었습니다 ㅎㅎ;;;
지금은 이제 조금만 손보면 됄거 같아요
응? 다 만드신 것 아닌가요? javac 로 컴파일하면 class 가 나올텐데, 그걸 html 에서 applet 태그나 object 태크로 불러들이면 웹에서 실행되는 것 아닌가욤?